【问题标题】:NoClassDefFoundError when hudson runs a maven projecthudson 运行 maven 项目时出现 NoClassDefFoundError
【发布时间】:2013-08-07 14:38:24
【问题描述】:

我有一个运行测试的项目。这是一个使用 Selenium 的 Maven 项目。它在本地启动时可以正常运行,但是从 Hudson 平台会抛出 NoClassDefFoundError:

Parsing POMs
[elsevier-selenium] $ "C:\Program Files\Java\jdk1.7.0_25/bin/java" -Xmx1024m -cp E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven-agent-1.353.jar;E:\maven\boot\classworlds-1.1.jar hudson.maven.agent.Main E:\maven E:\hudson\war\WEB-INF\lib\remoting-1.353.jar E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven-interceptor-1.353.jar 1753 E:\hudson\plugins\maven-plugin\WEB-INF\lib\maven2.1-interceptor-1.2.jar
<===[HUDSON REMOTING CAPACITY]===>channel started
Executing Maven:  -B -f E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\pom.xml integration-test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building selenium-elsevier
[INFO]    task-segment: [integration-test]
[INFO] ------------------------------------------------------------------------
[INFO] [compiler:testCompile {execution: default}]
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\target\test-classes
[INFO] [site:attach-descriptor {execution: default-attach-descriptor}]
[INFO] [failsafe:integration-test {execution: default}]
[INFO] Failsafe report directory: E:\hudson\jobs\tests-selenium\workspace\elsevier-selenium\target\failsafe-reports

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running fr.elsevier.tests.disponibilite.SearchTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.203 sec <<< FAILURE!
fr.elsevier.tests.disponibilite.SearchTest  Time elapsed: 0.203 sec  <<< ERROR!
java.lang.NoClassDefFoundError: Could not initialize class fr.elsevier.tests.BaseSelenium
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.apache.maven.surefire.report.SmartStackTraceParser.getClass(SmartStackTraceParser.java:63)
    at org.apache.maven.surefire.report.SmartStackTraceParser.<init>(SmartStackTraceParser.java:53)
    at org.apache.maven.surefire.common.junit4.JUnit4StackTraceWriter.smartTrimmedStackTrace(JUnit4StackTraceWriter.java:72)
    [...]
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)

SearchTest 扩展了 BaseSelenium。

这意味着它甚至无法在我的源文件夹中找到一个类。项目结构是这样的:

src/
  fr.elsevier.tests/
    disponibilite/
      SearchTest.java
    BaseSelenium.java
pom.xml

为什么构建会产生这些 NoClassDefFoundErrors 以及如何修复它?

【问题讨论】:

  • 尝试在本地和 hudson 构建中使用 -e 或 -X 命令行参数。然后尝试比较启动的java进程的classpath。
  • 感谢@SSR,使用 -X 选项,我可以看到 maven 配置文件配置错误,这在初始化 BaseSelenium 的静态变量期间导致异常。类路径没问题。太糟糕了,打印的异常是如此不直观:“NoClassDefFoundError”当类被实际找到但未能初始化时。
  • 添加了与答案相同的内容:)

标签: maven hudson


【解决方案1】:

尝试在本地和 hudson 构建中使用 -e 或 -X 命令行参数。然后尝试比较启动的java进程的classpath。

然后,您实际上可以通过更好的堆栈跟踪来确定 maven 生命周期的哪个部分引发了异常。

【讨论】:

    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多