2013-04-04 80 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