Spring @Autowire 没有通过 `mvn verify` 找到 bean

问题描述

我在 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 阶段发生在 packageintegration-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 也可以。