簡體   English   中英

如何管理 maven 中的多應用項目?

[英]How to manage multi app project in maven?

我目前正在嘗試將多應用程序項目從AntMaven
目前該項目由多個包組成,創建了某種依賴樹,沒有循環依賴。 這棵樹的葉子是“應用程序”包,包含一個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。
我現在嘗試這樣做的方式如下:

  • 配置每個apppom.xml以使用maven-assembly-plugin創建可執行 jar。
  • 為特定應用構建每個所需的模塊。
  • 構建應用程序模塊,生成可執行文件 jar。

因此app2的構建將構建lib1lib1Alib1Blib2lib2Alib2B ,最后是app2
然而,為了自動化構建,我需要為每個應用程序創建一個構建腳本,它負責構建所有需要的依賴項,maven 應該已經自己完成了。
另外,如果我想一次構建多個應用程序,我需要多次構建所有庫,或者自己跟蹤已經構建的模塊。
由於我是 maven 的新手,我不確定這是否是管理此類多應用項目的正確方法。
所以我想就如何正確管理這個用例征求一些建議。

編輯:
為了澄清我希望能夠做什么:

  • 使用其依賴項構建單個應用程序,而不構建所有應用程序(在父 pom 上運行 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將構建除app2Blib2B之外的所有模塊。
此外, app1Aapp2A使用的模塊lib1只會構建一次。

通常,您希望獨立地對每個模塊進行版本控制,但在我們的例子中,這會帶來巨大的工作量,因為我們有很多模塊構建在彼此之上。 “最低”模塊(示例中的lib1 )中的微小更改將導致幾乎每個模塊的更改。
所以在這種情況下,我們需要增加每個版本號並更新所有模塊中所有引用的依賴項。
相反,我們決定始終重建所有依賴項,從而始終保持最新的 Jar。 這就是為什么我們只管理父項目中的maven版本。

我認為使用 maven 多模塊,您只需導航到要構建的模塊,然后從那里運行 maven 命令。 Maven 將自動構建具有相關依賴關系的模塊,而無需構建不必要的模塊。

已編輯:原始答案不正確,經過一些測試后,我發現以下內容應該有幫助: Maven 模塊 + 構建單個特定模塊當從父級構建特定模塊時,您只需要添加 -pl 和 -am 標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM