我有一个多模块Maven + Spring项目。 一些模块依赖于其他模块。
比方说,我们有一个名为模块services
依赖于该模块命名的persistence
。
这些服务模块:
- 在春季的水平,进口
persistence
上下文 - 在Maven的水平,取决于对
persistence
模块
该persistence
模块定义了一些的configuratrion相关...持久性:数据源,JPA,交易...
它具有用于测试DB(JDBC驱动器,DBCP,H2)被限制到测试范围,因为当应用程序被部署时,数据源将在容器(Tomcat)的定义,并且通过JNDI访问某些依赖性。
现在,我想访问,期间的Maven的测试阶段services
模块,为的测试范围(传递)的依赖关系persistence
模块。
所述的Maven手册(表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>
然后,通过作为测试范围的其它模块的依赖性,在我们的例子中声明该试验瓶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定义它们...
是应该 ,但事实并非如此。 它以提供范围发生得。 问题记录在这里: 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?