问题描述
我在 https://github.com/poggs/spring-autowire-it-problem 有一个 Spring(不是 Spring Boot)项目。
通过 IntelliJ IDEA 运行集成测试 ExampleComponentIT
时,两个测试都通过,代码可以找到 bean ExampleComponent
。使用 mvn verify
运行集成测试时,它会失败,因为它找不到 ExampleComponent
。
我想要的是 mvn verify
能够找到 ExampleComponent
,因为它是作为 CI 构建过程的一部分执行的。
谁能指出我哪里出错了?
解决方法
将其命名为集成测试是没有意义的,例如open
,如果您想从 ExampleComponentIT
加载类。
版本 3.0.0-M5 是正确的,您应该正确构建或保证 JAR 文件按预期工作,然后 target/classes
将在集成测试中正常工作。
Surefire 和Failsafe 的区别在于Failsafe 可能在maven-failsafe-plugin
阶段失败,而Surefire 在verify
阶段失败。此外,Failsafe 插件使用 JAR 文件而不是 test
,这是集成测试所期望的,因为 target/classes
阶段发生在 package
和 integration-test
阶段之前。
Peter,我已经通过临时解决方法解决了这个问题
mvn verify -Dfailsafe.useModulePath=false
修复已经完成,将在3.0.0-M6版本中发布。那里不再需要解决方法 useModulePath=false。
,通过 maven-surefire-plugin
运行 mvn clean verify
,特别是 3.0.0-M5 时,目录 target/classes
不在类路径中。此目录包含集成测试所需的已编译 Java 代码。
将以下内容添加到 maven-failsafe-plugin
中的 pom.xml
配置可解决问题:
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>target/classes</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
或者,降级到 3.0.0-M4 也可以。