在 jenkins 上测试失败但在本地 运行
Test broken on jenkins but running locally
我们遇到了一个奇怪的错误。我们的测试是 运行 在本地机器 (windows) 但不是 运行 在 jenkins (linux).
我们得到一个
Caused by: java.lang.RuntimeException: There was an error in the forked process
java.lang.NoClassDefFoundError:
我正在寻找解决方案并在 bugzilla 上获得了此信息
或 archive.
有没有人知道这个问题以及如何解决它?
谢谢
更新
maven-surefire-plugin 也在父 pom.xml 中定义,用于与 cobertura 一起使用。测试 运行 两次,但第二次测试失败,如上所述。
我在 部分中定义了 2 个使用 surefire 插件和 surefire 插件定义的配置文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*SoapUiTest.java</exclude>
</excludes>
<excludes>
<!--exclude>**/*.java</exclude -->
</excludes>
<additionalClasspathElements>
<additionalClasspathElement>${basedir}/src/main/java</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>soapUi</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*SoapUiTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>integration</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
我做错了什么?
我记得有过类似的问题。它可能与 ulimit - 允许打开的文件数有关。 ClassLoader 需要打开文件进行加载。由于 class 不是 loaded/available NoClassDefFoundError 在方法调用时抛出。
检查可以打开多少个文件:
ulimit -a
要增加打开的文件数:
ulimit -n NEW_NUMBER
要永久更改它,请遵循 this link
中的说明
Follow the steps:
vi /etc/security/limits.conf and add below the mentioned
- soft nofile 65535
- hard nofile 65535
这是 cobertura 本身的问题 (-Dcobertura.test=true)。激活它解决了问题。
我们遇到了一个奇怪的错误。我们的测试是 运行 在本地机器 (windows) 但不是 运行 在 jenkins (linux).
我们得到一个
Caused by: java.lang.RuntimeException: There was an error in the forked process
java.lang.NoClassDefFoundError:
我正在寻找解决方案并在 bugzilla 上获得了此信息 或 archive.
有没有人知道这个问题以及如何解决它?
谢谢
更新
maven-surefire-plugin 也在父 pom.xml 中定义,用于与 cobertura 一起使用。测试 运行 两次,但第二次测试失败,如上所述。
我在 部分中定义了 2 个使用 surefire 插件和 surefire 插件定义的配置文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
<exclude>**/*SoapUiTest.java</exclude>
</excludes>
<excludes>
<!--exclude>**/*.java</exclude -->
</excludes>
<additionalClasspathElements>
<additionalClasspathElement>${basedir}/src/main/java</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>soapUi</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*SoapUiTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>integration</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<excludes>
<exclude>**/*EntityTest.java</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
我做错了什么?
我记得有过类似的问题。它可能与 ulimit - 允许打开的文件数有关。 ClassLoader 需要打开文件进行加载。由于 class 不是 loaded/available NoClassDefFoundError 在方法调用时抛出。 检查可以打开多少个文件:
ulimit -a
要增加打开的文件数:
ulimit -n NEW_NUMBER
要永久更改它,请遵循 this link
中的说明Follow the steps:
vi /etc/security/limits.conf and add below the mentioned
- soft nofile 65535
- hard nofile 65535
这是 cobertura 本身的问题 (-Dcobertura.test=true)。激活它解决了问题。