将jsoup添加为提供的依赖项后,Storm命令失败,并显示NoClassDefFoundError

将jsoup添加为提供的依赖项后,Storm命令失败,并显示NoClassDefFoundError,第1张

将jsoup添加为提供的依赖项后,Storm命令失败,并显示NoClassDefFoundError

这既是关于Maven的问题,也是关于Storm及其部署模型的问题。您必须检查该

storm
命令的实际作用。首先,它实际上是一个最终调用的Python脚本
java

如果您看一下函数

get_classpath(extrajars)
,您会注意到它根本不使用
$CLASSPATH
evironment变量。相反,它将加载核心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/
-基本上是同一件事。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5631435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存