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

Pie*_*nry 10 dependencies unit-testing maven multi-module

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

假设我们有一个名为services依赖于命名模块的模块persistence.

服务模块:

  • 在Spring级别,导入persistence上下文
  • 在Maven级别,取决于persistence模块

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

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

现在,我想在services模块的Maven测试阶段访问模块的测试范围(传递)依赖关系persistence.

所述的Maven手册(表3.1)说,通常,测试范围依赖是不可传递地.

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

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

Pie*_*nry 23

我确切地知道它应该如何工作,即在模块中生成测试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>
Run Code Online (Sandbox Code Playgroud)

然后通过将此测试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>
Run Code Online (Sandbox Code Playgroud)

注意第二个依赖项与第一个相同,除了type设置为test-jarscope设置为test 的那个.

现在,你可以想像的是,写在测试中的service模块将有机会获得的测试类persistence模块(这工作),而且在测试范围的维持模块的依赖关系.

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

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