![](/img/trans.png)
[英]How to Manage dependencies in Maven Muti Project across Multiple Maven Project
[英]How to manage multi app project in maven?
我目前正在嘗試將多應用程序項目從Ant
到Maven
。
目前該項目由多個包組成,創建了某種依賴樹,沒有循環依賴。 這棵樹的葉子是“應用程序”包,包含一個Main
。 中間節點是“庫”包,由其他庫“包”或“應用程序”包使用。
允許節點“一起生長”為單個節點或葉子。 我發現,這些包可能應該被分組到 maven 模塊中,我現在有一個類似於這樣的結構:
root
- lib1
- lib1A (depends on lib1)
- lib1B (depends on lib1)
- app1A (depends on lib1A)
- lib2 (depends on lib1B)
- lib2A (depends on lib2)
- lib2B (depends on lib2)
- app2 (depends on lib2A and lib2B)
- lib3 (depends on lib2A and lib2B)
- app3A (depends on lib3)
- app3B (depends on lib3)
基本上,一個庫和一個應用程序可以依賴於一個或多個其他庫。
現在我希望能夠自己構建每個應用程序並為其創建可執行文件 jar。
我現在嘗試這樣做的方式如下:
app
的pom.xml
以使用maven-assembly-plugin
創建可執行 jar。 因此app2
的構建將構建lib1
、 lib1A
和lib1B
、 lib2
、 lib2A
和lib2B
,最后是app2
。
然而,為了自動化構建,我需要為每個應用程序創建一個構建腳本,它負責構建所有需要的依賴項,maven 應該已經自己完成了。
另外,如果我想一次構建多個應用程序,我需要多次構建所有庫,或者自己跟蹤已經構建的模塊。
由於我是 maven 的新手,我不確定這是否是管理此類多應用項目的正確方法。
所以我想就如何正確管理這個用例征求一些建議。
編輯:
為了澄清我希望能夠做什么:
如果您在各自的 POM 中定義依賴關系並構建整個項目(在根級別),則 Maven 會自動對模塊進行拓撲排序,這意味着構建每個模塊一次,並且一切都以正確的順序完成。
我現在正在使用一個父項目,它定義了 maven 版本、常用依賴項和常用插件配置。
父項目還在module
-tags 中定義了它的子模塊。
每個子模塊都引用這個父項目並使用相同的版本。
為了構建應用程序,我在父項目中運行 maven,使用-pl
和-am
標志,如評論中所述。
-pl
標志告訴 maven 只構建列出的模塊,而不是構建整個項目。
-am
標志告訴 maven 也構建所需的依賴項。
例子:
給定以下結構:
parent
---- lib1
---- lib1A (depends on lib1)
---- lib1B (depends on lib1)
---- lib2 (depends on lib1B)
---- lib2A (depends on lib2)
---- lib2B (depends on lib2)
---- app1A (depends on lib1A)
---- app2A (depends on lib2A)
---- app2B (depends on lib2B)
執行mvn clean install -pl app1A,app2A -am
將構建除app2B
和lib2B
之外的所有模塊。
此外, app1A
和app2A
使用的模塊lib1
只會構建一次。
通常,您希望獨立地對每個模塊進行版本控制,但在我們的例子中,這會帶來巨大的工作量,因為我們有很多模塊構建在彼此之上。 “最低”模塊(示例中的lib1
)中的微小更改將導致幾乎每個模塊的更改。
所以在這種情況下,我們需要增加每個版本號並更新所有模塊中所有引用的依賴項。
相反,我們決定始終重建所有依賴項,從而始終保持最新的 Jar。 這就是為什么我們只管理父項目中的maven版本。
我認為使用 maven 多模塊,您只需導航到要構建的模塊,然后從那里運行 maven 命令。 Maven 將自動構建具有相關依賴關系的模塊,而無需構建不必要的模塊。
已編輯:原始答案不正確,經過一些測試后,我發現以下內容應該有幫助: Maven 模塊 + 構建單個特定模塊當從父級構建特定模塊時,您只需要添加 -pl 和 -am 標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.