Maven社区对这些概念的定义存在很大的问题。您说parent-pom是继承而module-pom是组合是正确的。但不幸的是,这两个概念的分离在 Maven 中没有历史。Maven 文档清楚地表明最好将它们分开。这将导致这种理想的结构
app-api/
app-impl/
app-war/
app-parent/
pom.xml
其中 pom.xml 是模块 pom。
但是你在开源领域看到的几乎每个项目都没有区分它们。
这是有原因的:许多插件也没有区分它们。甚至 Maven 本身也假设了另一种设置:如果<relativePath>
未设置 Maven 假设父级位于..
. 所以每个项目都必须指向<relativePath>../app-parent</relativePath>
父级。
与上述结构存在巨大问题的最受欢迎的插件是 maven-release-plugin!当您不遵循 module-pom 是 parent-pom 的假设时,您将面临奇怪的问题。
最严重的错误是 release-plugin 无法替换您父级中的 version-properties 并且由于 SNAPSHOT-Dependencies 而失败。你的父母可能会包含这样的东西
<properties>
<app-api.version>1.1-SNAPSHOT</app-api.version>
<app-impl.version>1.2-SNAPSHOT</app-impl.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>myorg</groupId>
<artifactId>app-api</artifactId>
<version>${app-api.version}</version>
</dependency>
<dependency>
<groupId>myorg</groupId>
<artifactId>app-impl</artifactId>
<version>${app-impl.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
通常,在发布这些属性时,这些属性会自动设置为其发布版本 1.1 和 1.2。但是发布插件(测试到版本 2.2.2)失败,并显示无法使用快照依赖项发布模块的消息。
如果您只“跳过”一些模块 poms,那么在您正确定义时这可能不是问题<relativePath>
。但是您必须尝试并期待 Maven 插件中的一些错误。除了这些错误之外,您完全可以分离 pom,如果您有时间制作沙盒版本,我会尝试一下。