Java Spring@Autowire未通过“mvn验证”找到bean`

Java Spring@Autowire未通过“mvn验证”找到bean`,java,spring,spring-test,Java,Spring,Spring Test,我有一个Spring(不是springboot)项目 当通过IntelliJ IDEA运行集成测试ExampleComponent时,两个测试都通过,代码可以找到beanExampleComponent。使用mvn verify运行集成测试时,由于找不到ExampleComponent,测试失败 我想要的是mvn verify能够在作为CI构建过程的一部分执行时找到ExampleComponent 有人能指出我的错误吗?当运行maven surefire插件时,特别是3.0.0-M5,通过mvn

我有一个Spring(不是springboot)项目

当通过IntelliJ IDEA运行集成测试
ExampleComponent
时,两个测试都通过,代码可以找到bean
ExampleComponent
。使用
mvn verify
运行集成测试时,由于找不到
ExampleComponent
,测试失败

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


有人能指出我的错误吗?

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

将以下内容添加到
pom.xml
中的
maven故障保护插件
配置中,可以解决此问题:

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

目标/类别

或者,降级到3.0.0-M4是可行的。

如果要从
目标/类
加载类,则将其命名为集成测试(例如
ExampleComponentIT
)是没有意义的

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


Surefire和Failsafe之间的区别在于,Failsafe可能在
验证
时失败,但Surefire在
测试
阶段失败。此外,故障保护插件使用JAR文件而不是
target/classes
,这是集成测试所期望的,因为
package
阶段发生在
integration test
verify
阶段之前,Peter,我已经通过临时解决方法解决了这个问题

mvn验证-Dfailsafe.useModulePath=false


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

谢谢,这很有意义!完全正确我也面临着同样的问题,但所讨论的类/bean实际上包含在
targetr/module.jar
中。然而,它仍然没有在failsafe的类路径上结束。此外,您答案中的“修复”与Spring在上的建议一致。此外,在我的例子中,当使用surefire而不是failsafe运行时,测试成功了
mvn test-pl module-Dtest=MyIT
正常,但
mvn verify-pl module-Dit.test=MyIT
失败。当然,这可能发生在-Dit.test=MyIT上,因为Failsafe和Surefire不同。Failsafe使用项目的JAR文件,但Surefire使用目标/类。Peter,如果它对您有效,请将类似内容放在这里。人们会有更大的机会找到这个。解决办法是什么?请您指向提交,谢谢。它在JIRA问题中得到了解决。代码更改不要这样做。Failsafe使用JAR文件,但Surefire使用目标/类。所以这不是插件的错。你必须看到什么;这就是类和JAR之间的区别。可能是一些类操作,字节码编织,等等。