2013-04-04 70 views
9

我有一个多模块Maven + Spring项目。一些模块依赖于其他模块。在一个多模块项目中,maven模块可以访问它所依赖的另一个模块的传递测试范围的依赖关系吗?

比方说,我们有一个名为services的模块,它取决于名为persistence的模块。

的服务模块:

  • 在春季的水平,进口persistence背景
  • 在Maven的水平,取决于persistence模块

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

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

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

Maven manual (Table 3.1)表示通常情况下,测试作用域依赖关系不可传递。

是否有可能以多模块项目的方式获取它们?

如果不是什么好的替代品? (定义父pom中的测试依赖关系?...)

回答

20

我觉得它应该正好是如何工作的,由即生成测试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定义它们...

+0

感谢这个,花了一个小时想知道为什么我没有找到异常类: – PiersyP 2013-11-07 12:56:08

+0

谢谢!!对于它的价值,我不需要包含主模块工件的依赖关系,只需要'测试'一,但其他人的里程可能会有所不同,当然。:) – CullenJ 2017-02-17 23:03:43

1

应该但它不。它也发生在提供的范围内。问题记录在这里:https://issues.apache.org/jira/browse/MNG-5255

+0

谢谢你,但你指出,这个问题而相关,不回答我题。实际上,它们几乎与它们存在的问题相反:测试/提供的依赖关系的传递依赖包含在最终的JAR中。 – 2013-04-05 07:13:28

+0

对不起! tl; dr :)我们遇到了测试范围传递依赖关系,而不是在单元测试类路径中,所以当我看到你的问题时,我只是假设它是同一个问题。 – tdrury 2013-04-05 11:52:56

+0

是否有其他模块将它们声明为非测试作用域依赖项?获取有效的POM(通过eclipse或帮助插件)来查看。 – tdrury 2013-04-05 11:53:54

相关问题