您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

这既是关于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/-基本上是同一件事。

其他 2022/1/1 18:34:00 有484人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶