2010-05-12 28 views
5

教育目的我已成立了一個項目佈局,像這樣(平以適合蝕越好):Maven - 用於聚合的'all'或'parent'項目?

-product 
| 
|-parent 
|-core 
|-opt 
|-all 

家長包含核心聚集項目,選擇和所有。核心實現應用程序的強制性部分。 Opt是可選部分。所有應該將核心與opt結合起來,並將這兩個模塊列爲依賴關係。

我現在想作以下工件:

  1. 產品core.jar添加
  2. 產品核心src.jar
  3. 產品的核心與 - dependencies.jar
  4. 產品opt.jar
  5. 產品-OPT-src.jar
  6. 產品選擇與 - dependencies.jar
  7. 產品all.jar在
  8. 產品全src.jar
  9. 產品全有,dependencies.jar

他們大多是相當簡單的生產。儘管如此,我還是遇到了一些聚合工件的問題。我已經設法在'all'模塊中使用自定義組裝描述符來製作product-all-src.jar,該模塊下載所有非傳遞代碼的源代碼,並且工作正常。這種技術還允許我製作產品 - 所有 - 依賴項.jar。

但是我最近發現,你可以使用源插件中的source:aggregate goal來聚合整個聚合項目的源代碼。對於javadoc插件也是如此,該插件也通過使用父項目進行彙總。

因此,我在我的'所有'模塊方法和拋棄'all'模塊之間發生了撕裂,只是使用'parent'模塊進行所有聚合。在「父母」中產生一些聚合文物,而在「全部」中產生其他文物的感覺是不清楚的。有沒有在父項目中製作'產品全部'jar或在'all'項目中聚合javadoc的方法?或者我應該保持兩種?

感謝

回答

5

平坦的樹木不再經常使用。這是幾年前完成的,用於處理Eclipse如何處理項目以及缺少良好的Maven和Eclipse集成。如果您使用m2eclipse將Maven項目導入到Eclipse中,那麼您將不會遇到任何Maven典型嵌套樹的問題。

至於什麼是如何構建Maven構建的一個很好的例子? Maven項目來源itself。它有你想要的所有部分,包括最終assembly打包捆綁。

典型的嵌套結構有一個自頂向下的層次結構,其中父級正在對其下方的模塊進行聚合,並且子級從父級繼承值。雖然這些可以並且有時是分開的,但這不是常態。

+0

感謝您的提示。我只是看了一下,看起來maven的源代碼遵循了我所建議的總體佈局,但是沒有像你指出的那樣展開樹。最後的程序集是IMO不是很乾淨,它只是爲'../'目錄中的所有源文件執行正則表達式grep,如果你想從3:rd方依賴關係等方面獲得源代碼,這並不容易。也不符合javadoc聚合器工作(通過父項目)。看起來我想要的功能不見了,當我嘗試了一些功能時,我會嘗試在這裏寫出另一種方法。感謝指針。 – 2010-06-07 13:12:35

+0

順便說一句,src程序集可以在http://svn.apache.org/repos/asf/maven/maven-3/trunk/apache-maven/src/main/assembly/src.xml找到。 – 2010-06-07 13:13:11

0

我建議只是保持裝配描述符從「全能」,將其移動到父/並相應地改變家長/ pom.xml的,然後通過執行類似mvn -f parent/pom.xml assembly:assembly創建裝配。換句話說,是的,刪除冗餘項目「全部」,因爲它只是重複了「父母」已經在做的事情。

在附註上,如果該項目是一個聚合項目而不僅僅是一個父pom.xml,那麼「parent」對於該項目來說似乎是一個糟糕的命名選擇。

[編輯]

雖然一個更大的項目,即規定,您是如何設想也許一個項目是Apache的駱駝項目。看看這裏:http://camel.apache.org/source.html。有一個父/模塊可以處理所有其他的事情,還有一個獨立的模塊用於生成apache-camel /中的實際構建發行版(在apache-camel/src // main/descriptors中有組裝描述符)。也許這會更有幫助。

+0

您是否建議我應該有一位家長,只有一位父母,還有一位「聚合」,它構建了完整的產品?你應該把「dependencyManagement」放在父代還是集合呢?你能提出一個很好的示例項目嗎? – 2010-05-14 07:28:10

+0

基本上是。如果你的「聚集」沒有做什麼比調用一個組件描述符,儘管沒有必要在一個單獨的模塊中。這可以與最高級別的pom一起生活(可能不是與父母一樣,正如我第一次提到的那樣)。 應該與父pom一起生活。 如果你有很多複雜的聚合(比如......針對Windows,Linux和OSX的單獨構建),那麼這些聚合應該放在個別模塊中。在你的情況下,它聽起來像只是一個簡單的程序集就可以做到。 – whaley 2010-05-14 12:05:42

+0

不好意思把這個拖出來,但是你如何爲一個聚合項目製作一個完整的jar?我似乎無法弄清楚如何在不創建「全部」項目的情況下執行此操作。 – 2010-05-18 08:44:50

相關問題