在多模块项目,可以在另一模块的行家模块访问传递的测试范围依赖它取决于?(In a multi-mod

2019-08-19 13:54发布

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

比方说,我们有一个名为模块services依赖于该模块命名的persistence

这些服务模块:

  • 在春季的水平,进口persistence上下文
  • 在Maven的水平,取决于对persistence模块

persistence模块定义了一些的configuratrion相关...持久性:数据源,JPA,交易...

它具有用于测试DB(JDBC驱动器,DBCP,H2)被限制到测试范围,因为当应用程序被部署时,数据源将在容器(Tomcat)的定义,并且通过JNDI访问某些依赖性。

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

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

是否有可能以某种方式获得他们在一个多模块项目的范围内?

如果不是有什么好办法? (定义在父POM测试依赖性?......)

Answer 1:

我发现它到底应该如何工作,通过生成测试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>

然后,通过作为测试范围的其它模块的依赖性,在我们的例子中声明该试验瓶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>

注意,第二依赖即除相同于第一type被设置为test-jar和用于scope被设置为测试。

现在,你会想象写的在测试service模块将有机会获得的测试类persistence模块这工作 ),而且在测试范围的维持模块的依赖关系。

然而,这是一个已知的问题( https://issues.apache.org/jira/browse/MNG-1378 ),它不这样的。 它已经开放自2005年以来,我没有看到它固定在不久的将来......但谁知道。

硅我将只需要复制两个模块的测试范围的依赖关系,或只是在父POM定义它们...



Answer 2:

应该 ,但事实并非如此。 它以提供范围发生得。 问题记录在这里: https://issues.apache.org/jira/browse/MNG-5255



文章来源: In a multi-module project, can a maven module access transitive test-scoped dependencies of another module it depends on?