这既是关于Maven的问题,也是关于Storm及其部署模型的问题。您必须检查该
storm命令的实际作用。首先,它实际上是一个最终调用的Python脚本
java。
如果您看一下函数
get_classpath(extrajars),您会注意到它根本不使用
$CLASSPATHevironment变量。相反,它将加载核心Storm
jar和
lib/相对于工作目录的目录下的所有jar,以及以下目录中的配置文件
~/.storm
(您会发现忽略
$CLASSPATH在许多Java应用程序中非常普遍。通常,“启动脚本”所做的第一件事是覆盖CLASSPATH或根本不使用它。这是为了防止导致未知/不支持/早期版本的jar。应用程序中的问题)。
至于在将jsoup声明为“提供”时您的应用程序失败:当将jar声明为提供的依赖项时,它将不会打包在“带有依赖项的jar”程序集中。请参见以下问题以获取良好的解释:Maven范围编译与JAR打包所提供的区别
tl; dr的解释是,编译范围是随uber-jar一起提供的,但前提是没有,因为预期它是由部署到的容器“提供”的。通常,“容器”是Java
Web服务器,例如Tomcat(因此,您永远不必随Java一起发布JSP或Servlet
jar)。在这种情况下,您希望“提供”类的“容器”是Storm。但是,Storm不提供jsoup,因此会出错。
编译范围类仍需要随应用程序一起提供,因为您的应用程序将实例化/使用接口,枚举等。
我的建议是只声明jsoup“编译”范围并继续。替代方法是编写您自己的定制部署脚本和/或程序集,将jsoup置于其下
lib/-基本上是同一件事。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)