栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将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/
-基本上是同一件事。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625551.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号