unit-testing – 在一个多模块项目中,maven模块可以访问它所依赖的另一个模块的传递测试范围的依赖关系吗?

我有一个多模块Maven Spring项目.一些模块依赖于其他模块.

假设我们有一个名为services的模块,它取决于名为persistence的模块.

服务模块:

>在Spring级别,导入持久性上下文
>在Maven级别,取决于持久性模块

持久性模块定义了一些与…持久性相关的配置:数据源,JPA,事务……

它具有一些依赖性,用于测试仅限于测试范围的DB(JDBC驱动程序,DBCP,H2),因为在部署应用程序时,DataSource将在容器(Tomcat)中定义并通过JNDI访问.

现在,我希望在服务模块的Maven测试阶段访问持久性模块的测试范围(传递)依赖关系.

Maven manual (Table 3.1)通常说,测试范围依赖关系不可传递.

是否有可能在多模块项目的背景下以某种方式获得它们?

如果没有什么是好的选择? (在父pom中定义测试依赖项?…)

最佳答案
我确切地知道它应该如何工作,即通过在模块中生成测试JAR,这是一种工件,在另一个模块中用作依赖,在我们的示例中是持久性模块:

<build>
    <plugins>

            <!-- Generate test jar too -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

    </plugins>
</build>

然后通过将此测试jar声明为另一个模块的测试范围依赖项,在我们的示例中为services模块:

<!-- Services module -->
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>services</artifactId>
    <version>${project.version}</version>
</dependency>
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>services</artifactId>
    <version>${project.version}</version>
    <type>test-jar</type>
    <scope>test</scope>
</dependency>

请注意第二个依赖项与第一个相同,但设置为test-jar的类型和设置为test的范围除外.

现在,您可以想象,在服务模块中编写的测试可以访问持久性模块的测试类(这可以工作),但也可以访问持久性模块的测试范围依赖项.

但是,它是一个已知的问题(https://issues.apache.org/jira/browse/MNG-1378),它不会那样工作.它自2005年开始营业,所以我不认为它在不久的将来会被修复……但谁知道呢.

我只需要在两个模块上复制测试范围的依赖项,或者只在父pom中定义它们…

转载注明原文:unit-testing – 在一个多模块项目中,maven模块可以访问它所依赖的另一个模块的传递测试范围的依赖关系吗? - 代码日志