java - 运行 Jenkins 插件时出现 JDOM NoClassDefFoundError

标签 java maven plugins jenkins stack-trace

我正在编写一个 Jenkins 插件,它使用我自己的 jar 之一。最后一个需要 JDOM。所以,我的 POM 中有 2 个依赖项:

  • 我自己的 JAR 使用 JDOM
  • JDOM

它构建成功(mvn clean install),但在运行过程中,我遇到此错误:org.jdom.JDOMException:java.lang.NoClassDefFoundError:org/jdom/Parent.

询问here , herehere无解。

JDOM jar 确实存在于 HPI 中:WEB-INF\lib\jdom-1.0.jar。我还尝试使用 Tomcat 运行 Jenkins。并且,我尝试将 JDOM 配置为 mask classes在我的 POM 中:

<build>
  <plugins>
    <plugin>
      <groupId>org.jenkins-ci.tools</groupId>
      <artifactId>maven-hpi-plugin</artifactId>
      <version>1.94</version>
      <configuration>
        <maskClasses>org.jdom.</maskClasses> <!-- HERE -->
        <pluginFirstClassLoader>true</pluginFirstClassLoader>
      </configuration>
    </plugin>
  </plugins>
</build>

没有成功。

<小时/>

我的插件的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.jenkins-ci.plugins</groupId>
    <artifactId>plugin</artifactId>
    <version>1.500</version><!-- which version of Jenkins is this plugin built against? -->
  </parent>

  <groupId>***</groupId>
  <artifactId>***</artifactId>
  <version>1.0</version>
  <packaging>hpi</packaging>

  <!-- get every artifact through repo.jenkins-ci.org, which proxies all the artifacts that we need -->
  <repositories>
    <repository>
      <id>repo.jenkins-ci.org</id>
      <url>http://repo.jenkins-ci.org/public/</url>
    </repository>
  </repositories>
  <pluginRepositories>
    <pluginRepository>
      <id>repo.jenkins-ci.org</id>
      <url>http://repo.jenkins-ci.org/public/</url>
    </pluginRepository>
  </pluginRepositories>
  <dependencies>
    <dependency>
      <groupId>com.***</groupId>
      <artifactId>***</artifactId>
      <version>12.2.01</version>
    </dependency>
    <dependency>
        <groupId>jdom</groupId>
        <artifactId>jdom</artifactId>
        <version>1.0</version>
    </dependency>
  </dependencies>
</project>
<小时/>

mvn 依赖:分析

[WARNING] Used undeclared dependencies found:
[WARNING]    org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING]    commons-lang:commons-lang:jar:2.6:provided
[WARNING]    org.kohsuke.stapler:json-lib:jar:2.1-rev7:provided
[WARNING]    commons-io:commons-io:jar:1.4:provided
[WARNING]    org.jvnet.hudson.dom4j:dom4j:jar:1.6.1-hudson-3:provided
[WARNING]    org.kohsuke.stapler:stapler:jar:1.199:provided
[WARNING] Unused declared dependencies found:
[WARNING]    jdom:jdom:jar:1.0:compile
[WARNING]    org.jenkins-ci.main:jenkins-war:war:1.500:test
[WARNING]    org.jenkins-ci.main:ui-samples-plugin:jar:1.500:test
[WARNING]    javax.servlet:servlet-api:jar:2.4:provided
[WARNING]    org.codehaus.mojo:animal-sniffer-annotations:jar:1.9:provided
[WARNING]    junit:junit:jar:3.8:test
<小时/>

堆栈跟踪

org.jdom.JDOMException: java.lang.NoClassDefFoundError: org/jdom/Parent: org/jdom/Parent
        at org.jdom.xpath.XPath.newInstance(XPath.java:139)
        at com.***.util.IOFile.scriptBlock(IOFile.java:449)
        at com.***.util.IOFile.scriptBlock(IOFile.java:502)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:211)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:176)
        at com.***.delivery.task.BuildFromTemplates.execute(BuildFromTemplates.java:89)
        at com.***.delivery.DeliveryThread.integrateSuite(DeliveryThread.java:1586)
        at com.***.delivery.DeliveryThread.run(DeliveryThread.java:363)
        at com.***.pmj.DeliveryBuilder.perform(DeliveryBuilder.java:303)
        at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
        at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:814)
        at hudson.model.Build$BuildExecution.build(Build.java:199)
        at hudson.model.Build$BuildExecution.doRun(Build.java:160)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:593)
        at hudson.model.Run.execute(Run.java:1568)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:237)
Caused by: java.lang.NoClassDefFoundError: org/jdom/Parent
        at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
        at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
        at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.jdom.xpath.XPath.newInstance(XPath.java:129)
        ... 17 more
Caused by: java.lang.ClassNotFoundException: org.jdom.Parent
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at winstone.classLoader.WebappClassLoader.loadClass(WebappClassLoader.java:83)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 25 more
Caused by: java.lang.NoClassDefFoundError: org/jdom/Parent
        at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
        at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
        at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.jdom.xpath.XPath.newInstance(XPath.java:129)
        at com.***.util.IOFile.scriptBlock(IOFile.java:449)
        at com.***.util.IOFile.scriptBlock(IOFile.java:502)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:211)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:176)
        at com.***.delivery.task.BuildFromTemplates.execute(BuildFromTemplates.java:89)
        at com.***.delivery.DeliveryThread.integrateSuite(DeliveryThread.java:1586)
        at com.***.delivery.DeliveryThread.run(DeliveryThread.java:363)
        at com.***.pmj.DeliveryBuilder.perform(DeliveryBuilder.java:303)
        at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
        at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:814)
        at hudson.model.Build$BuildExecution.build(Build.java:199)
        at hudson.model.Build$BuildExecution.doRun(Build.java:160)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:593)
        at hudson.model.Run.execute(Run.java:1568)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:237)
Caused by: java.lang.ClassNotFoundException: org.jdom.Parent
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at winstone.classLoader.WebappClassLoader.loadClassmaven (WebappClassLoader.java:83)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 25 more
Caused by: java.lang.NoClassDefFoundError: org/jdom/Parent
        at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
        at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
        at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.jdom.xpath.XPath.newInstance(XPath.java:129)
        at com.***.util.IOFile.scriptBlock(IOFile.java:449)
        at com.***.util.IOFile.scriptBlock(IOFile.java:502)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:211)
        at com.***.util.IOFile.createFileFromTemplate(IOFile.java:176)
        at com.***.delivery.task.BuildFromTemplates.execute(BuildFromTemplates.java:89)
        at com.***.delivery.DeliveryThread.integrateSuite(DeliveryThread.java:1586)
        at com.***.delivery.DeliveryThread.run(DeliveryThread.java:363)
        at com.***.pmj.DeliveryBuilder.perform(DeliveryBuilder.java:303)
        at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
        at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:814)
        at hudson.model.Build$BuildExecution.build(Build.java:199)
        at hudson.model.Build$BuildExecution.doRun(Build.java:160)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:593)
        at hudson.model.Run.execute(Run.java:1568)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
        at hudson.model.ResourceController.execute(ResourceController.java:88)
        at hudson.model.Executor.run(Executor.java:237)
Caused by: java.lang.ClassNotFoundException: org.jdom.Parent
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at winstone.classLoader.WebappClassLoader.loadClass(WebappClassLoader.java:83)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 25 more

如果您需要更多信息,请在评论中告诉我。谢谢!

最佳答案

临时解决方法:

令人惊讶的是,将 JDOM JAR jdom-1.0.jar 添加到 Jenkins 库文件夹 ~\.jenkins\war\WEB-INF\lib\ 解决了问题!

关于java - 运行 Jenkins 插件时出现 JDOM NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138477/

相关文章:

hibernate - hibernate4-maven-plugin 生成 PostgreSQL 模式的正确配置是什么?

java - 从 ButtonGroup 中获取所有 JRadioButton

Java 编译器选择了错误的重载

java - 批量运行ModelControllerClient

maven - 虚拟 :dummy:jar:1. 0、surefire-junit4、maven 和 Nexus

java - 在 Maven War 插件中过滤

javascript - 在 Google Chrome 上跟踪 CSS 修改

java - Java 中的一些斐波那契乐趣

java - "The command line is too long"——运行maven测试时

android - Flutter 和 Dart 插件未安装