Maven Failsafe:集成测试的 NoClassDefFoundError

Use*_*291 6 java integration-testing maven maven-surefire-plugin kotlin

设置:Spring Boot 应用程序中的 Kotlin 集成测试。

当我使用 IntelliJ 运行测试时,测试工作正常。但是,当我尝试使用 Maven 运行集成测试时:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.19.1:integration-test (default) on project myapp: Execution default of goal org.apache.maven.plugins:maven-failsafe-plugin:2.19.1:integration-test failed: There was an error in the forked process
[ERROR] java.lang.NoClassDefFoundError: ch/cypherk/myapp/service/CustomerService
[ERROR]         at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
[ERROR]         at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3138)
[ERROR]         at java.base/java.lang.Class.getConstructor0(Class.java:3343)
[ERROR]         at java.base/java.lang.Class.getConstructor(Class.java:2152)
[ERROR]         at org.apache.maven.surefire.junit.PojoAndJUnit3Checker.isPojoTest(PojoAndJUnit3Checker.java:51)
...
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为我需要竹子来运行这些该死的东西。

这是一个接口,是的,它已编译, maven 目录中CustomerService有一个相应的文件,并且 IntelliJ 设置为使用相同的文件。.class./target

无法完全弄清楚为什么会失败,并且希望获得该插件的一些帮助。

相关摘录自pom.xml

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.19.1:integration-test (default) on project myapp: Execution default of goal org.apache.maven.plugins:maven-failsafe-plugin:2.19.1:integration-test failed: There was an error in the forked process
[ERROR] java.lang.NoClassDefFoundError: ch/cypherk/myapp/service/CustomerService
[ERROR]         at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
[ERROR]         at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:3138)
[ERROR]         at java.base/java.lang.Class.getConstructor0(Class.java:3343)
[ERROR]         at java.base/java.lang.Class.getConstructor(Class.java:2152)
[ERROR]         at org.apache.maven.surefire.junit.PojoAndJUnit3Checker.isPojoTest(PojoAndJUnit3Checker.java:51)
...
Run Code Online (Sandbox Code Playgroud)

完整pom.xml: http: //freetexthost.com/dbghyawijj

失败的集成测试步骤的完整日志: http: //freetexthost.com/gbsmd3mwm2

小智 7

面临同样的问题,通过添加目标/类作为附加类路径元素来解决它。感觉有点脏但是有效:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.22.0</version>
        <configuration>
          <additionalClasspathElements>
            <additionalClasspathElement>${basedir}/target/classes</additionalClasspathElement>
          </additionalClasspathElements>
        </configuration>
      </plugin>
Run Code Online (Sandbox Code Playgroud)