我有一个由很多子项目组成的项目。考虑三个模块A,B,C。 B依赖于A和C依赖于A和B.A,B,C都有一个test-applicationContext.xml文件。 C使用A和B作为测试jar依赖项。问题是重复的finder插件在编译C时抛出了test-applicationContext.xml的重复资源错误。我试图通过使用test-jar目标上的<excludes>
标记从模块B中删除测试资源但是maven仍然是副本来自test-classes目录的测试资源。我验证了为模块B创建的测试jar没有xml文件。有人能说出什么问题吗?
A仅作为测试罐包装,而B既有主罐也有测试罐目标。 C的Pom文件如下:
<dependency>
<groupId>my.project</groupId>
<artifactId>A</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>my.project</groupId>
<artifactId>B</artifactId>
<type>test-jar</type>
<scope>test</scope>
</dependency>
A具有test-applicationContext.xml,如下所示:
A ---> src/main/resources/test-applicationContext.xml
而B的xml如下
B ---> src/test/resources/test-applicationContext.xml
在C
上执行mvn install时出现以下错误[WARNING] Found duplicate and different resources in [my.project:B:jar:tests, my.project:A]:
[WARNING] test-applicationContext.xml
[WARNING] Found duplicate classes/resources in test classpath.
我无法重命名这些文件,因为它们是我编写的spring配置类中的引用。我已将此添加到B:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
<configuration>
<excludes>
<exclude>*.xml</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
我不想从A中删除测试资源,因为它们就像默认情况下运行的参考资源,如果依赖它的模块没有自己的模块。
请帮助!!!!
答案 0 :(得分:0)
调整maven-duplicate-finder-plugin
&#39; checkTestClasspath
会为你工作吗?我有一个类似的问题,当我添加它时它就消失了:
<plugin>
<groupId>com.ning.maven.plugins</groupId>
<artifactId>maven-duplicate-finder-plugin</artifactId>
<version>...</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
<configuration>
<failBuildInCaseOfConflict>true</failBuildInCaseOfConflict>
<checkTestClasspath>false</checkTestClasspath>
<ignoredResources>
...
</ignoredResources>
</configuration>
</plugin>
主要警告:假设我理解这里正确发生的事情,您需要小心,不要破坏测试的稳定性。也就是说,如果以下所有都为真:
Foo.props
,和 Foo.props
,和 test-jar
<type>test-jar</type>
/ <scope>test</scope>
依赖关系
Foo.props
...然后它是不可预测的,Foo.props
将由项目C的测试使用。
如果您不关心这一点,或者我在这一点上错了,那么我认为这一改变可能会解决您的问题。