2011-10-06 77 views
1

我試圖瞭解maven配置文件並遇到以下問題。Eclipse Maven運行時依賴關係和配置文件

這是我簡單的例子,我有兩個Maven項目,項目A和項目B.

項目A對B項目的編譯時間行家依賴

項目B包括一個運行時依賴(讓對項目C說),當maven配置文件「TEST」處於活動狀態時。

所以問題是,當我跑項目A.它不具有項目下,在它生成的類路徑,即使測試配置文件是項目A.

這是使用Eclipse的赫利俄斯服務版本活躍1,Maven Integration for Eclipse插件vrs 0.10.2.20100623-1649

有什麼想法?

+0

這與eclipse有什麼關係?您是否運行mvn help:effective-pom或dependency:tree,還是僅使用-X? – bmargulies

+0

eclipse標籤的原因是我不確定它是否是eclipse插件問題或maven問題。感謝您讓我知道有關effective-pom的命令,似乎它的maven不會將運行時依賴項從項目B轉移到項目上。作爲有效的pom – user981839

回答

0

看起來依賴關係在依賴項目的配置文件中(傳遞性的)不會給運行時依賴關係給依賴於它們的人,這看起來很奇怪。

解決方法是將配置文件(包含依賴項)添加到父項,然後子項繼承依賴項。

即向A引入一個父項,我可以直接將它們放在A中,如YMomb所建議的那樣。但是我需要解決這個問題的遺傳方面,因爲我有很多項目。

0

我不確定配置文件是處理TEST的最佳方式。

使用配置文件更改依賴關係會更改生成的項目的POM。 如果在激活TEST的情況下安裝項目B,則會添加運行時依賴項。 (無論項目配置文件)。

可選依賴項不會被傳遞性添加。您需要在項目A中添加依賴項。

0

我剛剛在Eclipse中使用m2eclipse 0.12.x進行了測試。第二個項目的pom.xml這個樣子:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.test</groupId> 
    <artifactId>test2</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 

    <profiles> 
    <profile> 
     <id>TEST</id> 
     <dependencies> 
     <dependency> 
      <groupId>org.test</groupId> 
      <artifactId>test1</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <scope>runtime</scope> 
     </dependency> 
     </dependencies> 
    </profile> 
    </profiles> 
</project> 

然後,我在項目屬性對話框中設置的簡檔測試作爲有效的Maven面板上,並從工作區確信依賴解析啓用那裏。

這之後您可以運行test2的項目src/main/java和生成的類路徑中的類看起來是這樣的:

C:\Dev\Java1.6\bin\javaw.exe -Dfile.encoding=Cp1252 
    -classpath C:\Dev\Workspace\test2\target\classes;C:\Dev\Workspace\test1\target\classes org.test2.Test2 

注意,隨着運行時間範圍僅適用於在Eclipse的「Java應用程序」啓動配置類型的依賴關係,但而不是「JUnit」啓動配置,它使用了m2eclipse JDT集成提供的不同類路徑解析器。

+0

查看您的類路徑,您似乎已證明配置文件可在兩個項目之間工作。即你正在運行Test2並證明它在配置文件處於活動狀態時依賴於test1,這是不成問題的。我擁有的問題是test2對test1具有正常的依賴關係,而test1對其他內容具有依賴關係。然後在測試2中重新運行代碼。 – user981839