[英]Failed to load ApplicationContext in tests when maven-shade-plugin is used
我有这个测试
@RunWith(SpringRunner.class)
@ContextConfiguration(locations = "classpath:some-context-test.xml")
@DirtiesContext
public class SomeClassIT {
...
@Test
public void someTestMethod() {
...
}
...
}
从 IntelliJ IDEA 触发时运行没有问题,但因错误而失败
[ERROR] someTestMethod(x.y.z.SomeClassIT) Time elapsed: 0.001 s <<< ERROR!
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'entityManagerFactory' defined in class path resource [META-INF/db.xml]: Invocation of init method
failed; nested exception is org.hibernate.AssertionFailure: AttributeConverter class [class x.y.z.SomeConverter]
registered multiple times
Caused by: org.hibernate.AssertionFailure: AttributeConverter class [class x.y.z.SomeConverter] registered
multiple times
通过 maven 执行时
mvn verify -DskipITs=false
但是如果我从 pom.xml 中删除 maven-shade-plugin 配置(项目正在使用它),那么即使通过 maven 测试也会成功执行。
在此问答中找到了解决方案: https : //stackoverflow.com/a/56589859/2806801 。 maven-failsafe-plugin的参数classpathDependencyScopeExclude
:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>[...]</version>
<configuration>
<classpathDependencyScopeExclude>runtime</classpathDependencyScopeExclude>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
细节
由于 maven-shade-plugin META-INF/db.xml
(由some-context-test.xml
导入)被加载了两次:
在我将参数classpathDependencyScopeExclude
设置为runtime
, META-INF/db.xml
仅从
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.