簡體   English   中英

多模塊Maven項目-獨立性排除

[英]Multimodule maven project - exclusions in depenedency

我希望我的ModuleTypeA戰爭將ModuleBase作為依賴項包含在'src / main / java / typeA'包中,並且類似地,我希望ModuleTypeB戰爭將ModuleBase作為包含依賴項包含在'src / main / java / typeB'軟件包中。

這是我的項目結構:

ModuleBase
   |
   |----> src/main/java/base
   |----> src/main/java/typeA
   |----> src/main/java/typeB
   |----> pom.xml

ModuleTypeA
   |
   |----> src/main/java/..
   |----> pom.xml

ModuleTypeB
   |
   |----> src/main/java/..
   |----> pom.xml

我是Maven的新手,不確定如何實現這一目標。 ModuleBase不能是父項目,因為我需要為此創建一個jar(不能具有包裝類型pom),因此我可以創建一個頂級父項目。

歡迎任何建議。

謝謝

首先,閱讀有關依賴項排除的文章: 可選依賴項和依賴項排除

如果要從ModuleBase構建.war文件,則不能將其作為依賴項,而可以作為ModuleBase的ModuleTypeA的覆蓋,而類似地,ModuleTypeB war也可以作為ModuleBase的覆蓋。 為此,您可以使用Maven War插件: Maven War插件

這樣,要排除軟件包,請在pom.xml中使用以下代碼:

<excludes>
   <exclude>src/main/java/typeA</exclude>
</excludes>

更新:

我還沒有嘗試過,但是有兩種方法可以從.jar中排除軟件包。

1)使用Maven Assembly Plugin 您可以參考以下示例:

使用Maven程序集排除文件不起作用

2)使用Maven Jar插件 ,以示例的形式查看此答案:

maven-jar-plugin排除失敗

您可以在ModuleBase中創建不同的程序集,並在ModuleTypeA / B中將其稱為系統依賴項。

您可以使用<systemPath>../module-base/target/rt.jar</systemPath>將路徑設置為依賴項

一個maven項目中的多個程序集可能會幫助您解決程序集主題。

通常,它應該看起來像這樣:

proj
  + proj-base
    + src/main/java/   // containing base code
    + pom.xml
  + proj-mod-type-a
    + src/main/java/   // containing module a code
    + pom.xml          // dependency to proj-base
  + proj-mod-type-b
    + src/main/java/   // containing module b code
    + pom.xml          // dependency to proj-base
  + proj-a-web
    + src/main/java    // war A source
    + pom.xml          // dependency to proj-base and proj-mod-type-b
  + proj-b-web
    + src/main/java    // war B source
    + pom.xml          // dependency to proj-base and proj-mod-type-a

簡而言之,將您的項目分成有意義的模塊,每個模塊都是依賴的單元。 根據所需的依賴關系構造WAR。

如果proj-base實際上是您想在其他WAR中重用其內容的WAR,那么您可能會更接近Maven中WAR覆蓋的行為。 但是,我相信基本思想仍然相同:在構建WAR / EAR時更好地模塊化您的項目並具有適當的依賴性

暫無
暫無

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

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