0

我有一个由几个模块组成的 Maven 项目。一些模块依赖于其他模块,例如模块 C <- 模块 B <- 模块 A。模块 C 依赖于模块 B,而模块 B 又依赖于模块 A。

在每个模块中,我在 main/resources 和 test/resources 中都有 Spring 配置文件,测试中的用于单元测试,而 main 下的那些用于发布/生产。每个配置文件都是自包含的 - 模块 B 只包含它的 Spring 配置(文件名就像 foo-B.xml、foo-A.xml)

但是,当我需要测试模块 C 时,我需要在 test/resources 下引用模块 B 的 Spring 配置,但包含的是模块 B 的 main/resources 配置文件。这带来了一个问题,因为生产文件引用了测试文件没有的 JNDI 数据源。

如何让 Maven 或 Spring 从模块依赖项中引用测试配置文件?

4

2 回答 2

4

Maven 将源类和资源与测试类和资源分开。您可以配置模块 B 以使用maven-jar-plugin test-jar 目标创建一个测试 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 插件的使用文档中有所描述。

于 2013-09-04T18:35:54.997 回答
0

我不确定这是否可以做到。Maven 故意不在工件中包含测试资源。如果我在你的位置,我会在模块 C 中复制测试资源。大概,你没有在两个模块中测试相同的东西,所以希望它不会导致复制&粘贴/双重维护的坏情况。

顺便说一句,我尽量避免使用“生产”数据源和“测试”数据源。对两者使用相同的 JNDI 名称,但将 JNDI 提供程序配置为根据情况指向测试或生产。例如,我们所有的 Web 服务器都定义了相同的数据源,但是 dev/qa/prod 的 JDBC url 不同。对于您的单元测试,使用 simple-jndi 之类的东西来模拟 JNDI 环境。

于 2013-09-04T18:07:50.533 回答