从顶级模块中排除Maven子模块的依赖关系

时间:2018-08-01 21:13:57

标签: java maven

我创建了一个包含三个模块的maven父项目:

  • 数据层模块
  • 数据服务模块(使用数据层模块)
  • 网络模块(使用数据服务模块)

这是父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的{​​{1}}与pom.xml有依赖关系:

data-layer-module

<dependencies> <dependency> <groupId>org.mygroup</groupId> <artifactId>data-layer-module</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> web-module有依赖关系:

data-service-module

一切都很好,但是我不希望<dependency> <groupId>org.mygroup</groupId> <artifactId>data-service-module</artifactId> <version>1.0-SNAPSHOT</version> </dependency> 能够访问web-module。我需要强制执行三层Web服务数据模型。此配置不是这种情况。
我显然尝试过手动将其从data-layer-module 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依赖性。

该配置如何完成?

1 个答案:

答案 0 :(得分:1)

如果Web模块将在与数据服务层相同的jvm中运行,则必须对数据层模块有短暂的依赖关系-这就是您添加的排除导致应用程序失败的原因。

您可以考虑制作一个简单的api,例如data-service-layer-api,它显然不依赖于data-layer-module,并且可以由data-service-layer正确实现。

您仍然可以使用多模块Maven项目,但是现在您将拥有2个构件-一个Web模块和一个数据服务,必须将它们分开部署。

基本上,这是严格依赖关系分析和项目复杂性之间的权衡。