我有一个由几个模块组成的Maven项目。一些模块依赖于其他模块,例如模块C< - 模块B< - 模块A.模块C依赖于模块B,模块B依赖于模块A.
在每个模块中,我在main / resources和test / resources中有Spring配置文件,被测试的文件用于单元测试,而main下的那些用于发布/生产。每个配置文件都是自包含的 - 模块B只包含其Spring配置(文件名就像foo-B.xml,foo-A.xml)
但是,当我需要测试模块C时,我需要在测试/资源下引用模块B的Spring配置,但包含的是模块B的主/资源配置文件。这就产生了一个问题,因为生产文件引用了JNDI数据源,其中测试版没有。
如何让Maven或Spring从模块依赖项中引用测试配置文件?
答案 0 :(得分:4)
Maven将源类和&分隔开来。来自测试类的资源&资源。您可以使用maven-jar-plugin test-jar goal配置模块B以创建测试jar。然后,您可以将模块C参考模块B的测试代码作为依赖项。
<dependency>
<groupId>com.myCompany</groupId>
<artifactId>moduleB</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
或者,您可以创建一个常规的Maven项目,仅包含您要共享的测试代码,然后将其作为测试依赖项包含在需要的位置。这个想法在maven jar plugin's usage docs。
中有所描述答案 1 :(得分:0)
我不确定这可以做到。 Maven故意不包括工件中的测试资源。如果我在你的位置,我会复制模块C中的测试资源。据推测,你没有在两个模块中测试相同的东西,所以希望它不会导致复制和粘贴/双重维护的坏情况。
顺便说一句,我尽量避免使用“生产”数据源和“测试”数据源。对两者使用相同的JNDI名称,但是将JNDI提供程序配置为根据环境指向测试或生产。例如,我们所有的Web服务器都定义了相同的数据源,但是对于dev / qa / prod,JDBC URL是不同的。对于单元测试,使用simple-jndi之类的东西来模拟JNDI环境。