Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的pom.xml依赖项不是';找不到我的詹金斯插件?_Java_Maven_Jenkins - Fatal编程技术网

Java 为什么我的pom.xml依赖项不是';找不到我的詹金斯插件?

Java 为什么我的pom.xml依赖项不是';找不到我的詹金斯插件?,java,maven,jenkins,Java,Maven,Jenkins,Mypom.xml具有以下依赖关系: <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <

My
pom.xml
具有以下依赖关系:

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>
<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-b</artifactId>
  <version>1.0</version>
  <type>bar</type>
  <scope>runtime</scope>
</dependency>

net.sf.json-lib

自述文件有精确的复制步骤

所选答案的注释 我的样本回购的公关让我走到了我需要去的地方。我确实有一些其他问题需要解决,但JSONObject冲突是核心问题。按照杰西的公关建议,我把所有的全球配置都去掉了。另一个可能会让未来的浏览者担心的问题是,当使用
xom
作为显式依赖项时,同时对
org.jenkins ci.plugins
使用高于1.626的版本。

请谷歌“noclassdeffounderrorvs未找到类”,此错误意味着实际上找到了类依赖项,但在运行时不可用

尝试以下步骤:

  • 运行
    mvn清洁软件包
    mvn清洁安装
  • 检查您的maven环境是否正确,是否有最新的JAR
  • 检查已安装的目标项目是否包含所需的JAR
  • 检查是否将依赖项类型选择为运行时,而不是仅选择为 在
    pom.xml中编译时
以下是使用运行时依赖关系的示例:

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>
<dependency>
  <groupId>group-a</groupId>
  <artifactId>artifact-b</artifactId>
  <version>1.0</version>
  <type>bar</type>
  <scope>runtime</scope>
</dependency>

a组
伪影-b
1
酒吧
运行时

Jenkins核心包
json库
。(一个分叉副本,对于这个问题来说并不重要。)它不捆绑可选的依赖项imk XOM,不管是什么。当您的插件加载
XmlSerializer.class
时,它由Jenkins core的类加载程序定义,然后该类加载程序尝试链接到类,如
nu.xom.Node
。由于这在
XmlSerializer
的定义加载器(Jenkins核心类加载器)(或多或少地
Jenkins.war!/WEB-INF/lib/*.jar
)中不可用,因此会出现错误。在插件类加载器中可以访问该名称的类这一事实是没有意义的,请原谅这个双关语

如果您的插件需要使用自己的类版本,这些类通常捆绑在Jenkins core中,并隐式地公开给插件,那么它不仅需要捆绑这些JAR(一个常规的
编译
范围的Maven依赖就足够了),还需要使用。在尝试这样做之前,您最好彻底理解Java类加载语义,否则您将迷失在一个神秘的²
ClassCastException
s和
LinkageError
s迷宫中

顺便说一句,通常用于迭代测试插件代码的
mvnhpi:run
命令并不模拟实际的类加载机制。因此,如果您正在使用
pluginFirstClassLoader
或此空间中的任何其他技巧,请始终通过在示例Jenkins实例中(重新)安装
*.hpi
,例如使用
/pluginManager/advanced
,或
install plugin
CLI命令,仔细检查生成的类加载行为。根据您的描述判断,您已经在这样做了(并且可能不知道
hpi:run

这里的原罪是使用
可选的
依赖项
json-lib
应该定义一个不同的工件
json-lib-xom
,它对
json-lib
xom
具有硬依赖性。这将确保任何给定的类装入器都可以看到
XmlSerializer
及其依赖项,或者两者都看不到


唉,这方面没有进展。标记为复制品,但我不确定它是什么的复制品。从理论上讲,Java 9模块通过施加像Jenkins这样的应用程序无法使用该模块系统的繁重限制,使类似这样的问题变得过时。

我猜XOM jar的本地版本与Maven版本中使用的版本不一样。要验证,请使用
dependency:list
Maven命令列出所有依赖项。验证所列出的XOM依赖项是否与本地jar的版本相同。

当第一次加载此依赖项时,jenkins上可能发生错误,现在认为它已完成。尝试从jenkins的maven本地存储库中删除依赖项并重新运行。这可能会对你有所帮助

你在建优步罐吗?您需要使用assembly或shade插件将依赖项添加到jar文件。@puhlen这些插件是用于java还是用于Jenkins的上下文?我认为Maven应该自己管理依赖关系,那么为什么需要插件呢?这些都是Maven插件。在maven中,一切都是由插件完成的,插件将您的依赖项打包到jar中。Maven确实为您处理了这个问题,但是您需要告诉它您想要(通过添加和配置插件)@puhlen在Jenkins的上下文中,我必须上传一个hpi。正如您所说,这些插件是关于向JAR中添加更多内容的。但是Jenkins没有使用我的JAR,我不熟悉.hpi文件。看起来像jenkins插件文件?构建胖罐子不需要jeninks插件。你不使用jar是什么意思?啊,让我试试
pom.xml
中的作用域
runtime
。可能就是这样。我看到你更新了你的答案。默认值是编译。在你的帖子之后,我刚刚读到了这篇文章:)切换到运行时会将错误更改为
java.lang.ClassNotFoundException:nu.xom.Node
你能检查一下安装的目标并查看它是否包含jar(步骤4),你能显示日志和分解的目标war文件吗?还是子文件夹?在本地,我看到了我的项目的jar,但没有看到依赖项jar。但我并没有看到其他依赖项的jar文件,这些依赖项工作得很好。在Jenkins中,我看到目标文件夹下根本没有JAR。当我在Jenkins中调用一个目标时,我会执行
clean clover:setup test clover:aggregate clover:clover
注意这是一个