2010-07-27 31 views
12

我對Maven很陌生,現在正在嘗試設置我的第一個項目樹。我正努力去理解兩種選擇之間的區別:Maven:Aggregation vs. Dependency

我有我想捆綁的jar和戰爭項目(兩個)。傳統上,我只是創建一個耳朵項目,將它們全部四個作爲依賴關係。

現在我讀了關於poms的聚集,我不知道該做什麼(請參閱http://maven.apache.org/pom.html#Aggregation)。我應該用這四個項目創建一個聚合POM嗎?

我想我的問題基本上是我的問題是:如果依賴項是我的「自己」項目之一,模塊和依賴項之間的最大區別是什麼。

+0

SO中的約定是使用標籤maven-2,除非你指的是(死)maven版本1.如果你問我,這是一個討厭的問題,但事實就是這樣。改變了你的。 – 2010-07-27 12:58:09

回答

11

模塊只是組織事物的一種方式。

在多模塊構建中,您可以在一個步驟中構建整個工件樹(請記住Joel Test)。但是,每個這些都將是一個單獨的工件,可以單獨將其引用爲依賴項。

這裏是一個樣本佈局,用圓括號包裝。

root (pom) 
    - project1 (jar) 
    - project2 (war) -> references project1 as dependency 
    - project3 (jar) 
    - project4 (war) -> references project3 as dependency 
    - project5 (ear) -> references project2 and project4 as dependency 

在根目錄下調用mvn install來構建整個樹。

這裏的假設是,project1僅用於project2,project3僅用於project4。否則,這是一個更復雜的情況。

root (pom) 
    - project1 (jar) 
    - project2 (jar) 
    - project3 (war) -> references project1 and project2 as dependency of scope provided 
    - project4 (war) -> references project1 and project2 as dependency of scope provided 
    - project5 (ear) -> references project1 through project4 as dependency 

因此,模塊將獨立完成幾個項目的工作,但您仍然需要自己管理您的依賴關係。

+2

感謝您的回答! 只是要說清楚一點:如果在你的例子中,我不會使用'root'項目,而只是建立project5(即'mvn install'那裏),那麼它將不會自動重新編譯項目1-4,對吧?我想這就是我虛假的想法,什麼導致了我的困惑。 – apropoz 2010-07-27 13:08:53

+0

。 Maven在當前目錄下無處可用。它會解析本地或遠程存儲庫中的其他工件,但除非它們位於當前樹內,否則不會重新構建它們。 – 2010-07-27 14:35:13