【发布时间】:2018-02-10 17:18:40
【问题描述】:
我的pom.xml 有这个依赖:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
当我使用XMLSerializer 时,它会抛出异常:java.lang.NoClassDefFoundError: nu/xom/Node
如果我在本地运行该类并将 JAR 添加到我的类路径中,一切都会按预期运行。我将这个类作为 Jenkins 插件运行,所以我不希望手动定义类路径 - 我认为这就是 Maven 应该处理的。
请务必注意,Jenkins 插件需要我上传从 Maven 创建的 hpi 文件。它没有根据输出 jar 运行。如果我继续使用 Jenkins 盒子并手动将 xom JAR 放入 WEB-INF/libs,它就可以工作。但显然这意味着这个插件不适合其他人,这是弄巧成拙的。
这是导致错误的最少代码:https://github.com/DaveStein/parser-sample
自述文件有准确的复制步骤。
关于所选答案的说明
我的示例 repo 的 PR 让我大部分时间到达了我需要的地方。我确实有一些其他问题需要解决,但 JSONObject 冲突是核心问题。我按照 Jesse 的 PR 建议取出了所有 GlobalConfiguration。可能与未来查看者有关的唯一其他问题是在使用 xom 作为显式依赖项时出现一些故障,同时在本文发布时还为 org.jenkins-ci.plugins 使用高于 1.626 的版本。
【问题讨论】:
-
你在构建一个 uber jar 吗?您需要使用程序集或shade插件将您的依赖项添加到jar文件中。
-
@puhlen 这些插件是用于 java 还是用于 Jenkins 的上下文?我以为 Maven 应该自己管理依赖关系,那为什么需要插件呢?
-
那些是 maven 插件。在 Maven 中,一切都由插件完成,插件将您的依赖项打包到 jar 中。 Maven 确实会为您处理这个问题,但您需要告诉它您想要(通过添加和配置插件)
-
@puhlen 在 Jenkins 的上下文中,我必须上传一个 hpi。正如您所说,这些插件是关于在 JAR 中添加更多内容。但无论哪种方式,我的 JAR 都没有被 Jenkins 使用。
-
我不熟悉 .hpi 文件。看起来像一个詹金斯插件文件?你不需要 jenks 插件来构建一个胖 jar。你是什么意思你不使用罐子?