2011-06-01 132 views
4

我工作的一個多項目,而現在我有一個類似於此的結構(實際上有幾個罐子的項目和一些戰爭項目)的Maven - 項目之間共享庫

/myProj 
|_______projA (jar) 
|   |____pom.xml 
|   |____target/jar files 
|_______projB (war) 
|   |___pom.xml 
|   |___web-inf/lib/jarfiles 
|_______projEar 
|   |___pom.xml 
|___pom.xml 

我想實現的目的是讓projAprojB從公共共享文件夾中讀取它們的依賴關係,而不是保留它們自己的副本。實際上,我並不關心他們在編譯時閱讀它們的位置,但是當我打包我的EAR文件時,我希望每個jar/war只出現一次,因此減少了EAR大小。

我試過聲明父pom的依賴關係,聲明依賴關係和其他一些東西,但到目前爲止我還沒有實現這一點。

有沒有簡單的方法來實現這一目標?任何簡單的Maven插件?

在此先感謝。

回答

6

您應該能夠通過添加JAR作爲依賴你的耳朵的pom.xml做到這一點:

<dependencies> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-web</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>war</type> 
    </dependency> 
    <dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 

...並指定依賴在你的戰爭的pom.xml提供:

<dependency> 
     <groupId>com.mycompany</groupId> 
     <artifactId>myapp-utils</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <scope>provided</scope> 
    </dependency> 

如果Maven的/等工裝已複製的JAR到你的WEB-INF/lib目錄,您可能需要刪除文件前手動重建。

這將導致窗體的EAR:

META-INF/MANIFEST.MF 
lib/myapp-utils-0.0.1-SNAPSHOT.jar 
META-INF/application.xml 
myapp-web.war 
3

當你正在向Maven的時候,你不應該存儲依賴JAR在你的代碼庫。我建議你創建一箇中央的Maven倉庫,它將包含所有的依賴關係。

請參閱mvn install先將這些工件安裝到本地存儲庫中。另外,您可以參考maven central repository在構建時獲取工件。

你需要做的是:從源代碼中刪除所有的依賴jar,以及它們在pom.xml中的所有依賴。這些將在需要時從Maven中央存儲庫下載和打包。相應地設置工件的Dependency Scope