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

Spring @Autowire does not find beans through `mvn verify`

我在 https://github.com/poggs/spring-autowire-it-problem 有一个 Spring(不是 Spring 启动)项目。

当运行通过IntelliJ IDEA进行集成测试ExampleComponentIT时,两个测试都通过了,代码可以找到bean ExampleComponent。 运行 与 mvn verify 的集成测试失败,因为找不到 ExampleComponent.

我想要的是 mvn verify 能够找到 ExampleComponent,因为它作为 CI 构建过程的一部分执行。

谁能指出我哪里错了?

当运行 maven-surefire-plugin时,特别是3.0.0-M5,通过mvn clean verify,目录target/classes不在类路径上。此目录包含集成测试所需的已编译 Java 代码。

将以下内容添加到 pom.xml 中的 maven-failsafe-plugin 配置可解决问题:

<configuration>
  <additionalClasspathElements>                     
    <additionalClasspathElement>target/classes</additionalClasspathElement>
  </additionalClasspathElements>
</configuration>

或者,降级到 3.0.0-M4 也可以。

将其命名为集成测试没有意义,例如ExampleComponentIT,如果你想从 target/classes.

加载 类

版本 3.0.0-M5 是正确的,您应该正确构建或保证 JAR 文件按预期工作,然后 maven-failsafe-plugin 将在集成测试中正常工作。

Surefire 和 Failsafe 的区别在于 Failsafe 可能会在 verify 阶段失败,而 Surefire 会在 test 阶段失败。此外,Failsafe 插件使用 JAR 文件而不是 target/classes,这是集成测试所期望的,因为 package 阶段发生在 integration-testverify.[=19 阶段之前=]

Peter,我已经通过临时解决方法解决了这个问题

mvn verify -Dfailsafe.useModulePath=false

修复已经完成,将在3.0.0-M6版本中发布。那里不再需要解决方法 useModulePath=false