我创建了一个包含三个模块的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
依赖性。
该配置如何完成?
答案 0 :(得分:1)
如果Web模块将在与数据服务层相同的jvm中运行,则必须对数据层模块有短暂的依赖关系-这就是您添加的排除导致应用程序失败的原因。
您可以考虑制作一个简单的api,例如data-service-layer-api,它显然不依赖于data-layer-module,并且可以由data-service-layer正确实现。
您仍然可以使用多模块Maven项目,但是现在您将拥有2个构件-一个Web模块和一个数据服务,必须将它们分开部署。
基本上,这是严格依赖关系分析和项目复杂性之间的权衡。