簡體   English   中英

從頂級模塊中排除Maven子模塊的依賴關系

[英]Exclude maven sub modules dependencies from top level module

我用三個模塊創建了一個Maven父項目:

  • 數據層模塊
  • 數據服務模塊(使用數據層模塊)
  • Web模塊(使用數據服務模塊)

這是父pom.xml的片段:

<groupId>org.mygroup</groupId>
<artifactId>myArtifact</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>

<modules>
  <module>data-layer-module</module>
  <module>data-service-module</module>
  <module>web-module</module>
</modules> 

data-layer-module pom.xml包含對其他模塊的依賴關系(僅包含其外部依賴關系)。

data-service-module在其pom.xml具有與data-layer-module的依賴關系:

<dependencies>
      <dependency>
          <groupId>org.mygroup</groupId>
          <artifactId>data-layer-module</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
</dependencies>

web-moduledata-service-module有依賴關系:

<dependency>
    <groupId>org.mygroup</groupId>
    <artifactId>data-service-module</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

一切都很好,但是我不希望web-module能夠訪問data-layer-module 我需要強制執行三層Web服務數據模型。 此配置不是這種情況。
我顯然嘗試過手動將其從web-module pom.xml排除:

<dependency>
    <groupId>org.mygroup</groupId>
    <artifactId>data-service-layer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <exclusions>
        <exclusion>
            <groupId>org.mygroup</groupId>
            <artifactId>data-layer-module</artifactId>
        </exclusion>
    </exclusions>
</dependency>  

但這會導致編譯錯誤,因為data-service-module找不到其data-layer-module依賴性。

如何配置?

如果Web模塊將與數據服務層在同一jvm中運行,則必須對數據層模塊具有暫時依賴性-這就是為什么您添加的排除導致應用程序失敗的原因。

您可以考慮制作一個簡單的api,例如data-service-layer-api,它顯然不依賴於data-layer-module,並由data-service-layer正確實現。

您仍然可以使用多模塊Maven項目,但是現在您將擁有2個構件-一個Web模塊和一個數據服務,必須將它們分開部署。

基本上,這是嚴格依賴關系分析和項目復雜性之間的權衡。

暫無
暫無

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

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