首页 > 解决方案 > 我可以通过设置 RelPath 来拥有一个 Maven 父项目吗

问题描述

我有一个多模块项目。

父项目不包含任何代码,只是设置公共属性定义、项目版本号等。并指定模块和构建顺序。

我希望每个子模块都有一个

<parent>
    <relpath>../pom.xml</relpath>
</parent>

所以每个模块都继承了组,版本,以及java编译器版本等公共属性。

但这似乎不是有效的 Maven。我必须指定父组、工件和版本。(而不仅仅是 artifactID)。

当我提升项目的版本时,我必须进入每个子模块来提升父模块的版本。

我宁愿不必跟踪子模块 A 版本 X 与子模块 B 版本 Y 兼容...我希望所有子模块(A..Z)都有一个与项目(父级)匹配的新版本。

这可能吗?

标签: mavenpom.xmlparentmulti-module

解决方案


是的,这是可能的,但您需要使用第三方插件,即Mojo/Codehaus的 Versions 插件。您不需要安装或做任何特别的事情来使用它,但它不是核心插件的一部分。

假设您有以下布局:

根 POM:

<project>
  <groupId>org.example</groupId>
  <artifactId>root-pom</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <modules>
    <module>child-1</module>
    ...
  </modules>
  ...
</project>

子 POM(s),直接位于根 POM 的子目录中,具有内部依赖关系:

<project>
  <parent>
    <groupId>org.example</groupId>
    <artifactId>root-pom</artifactId>
    <version>1.0.0-SNAPSHOT</version> <!-- Hard-coded -->
    <relativePath>..</relativePath>
  </parent>
  <artifactId>child-1</artifactId>
  ...
  <dependencies>
    <dependency>
      <groupId>org.example</groupId>
      <artifactId>child-2</artifactId>
      <version>${project.version}</version> <!-- Dependency to another module in the reactor -->
   </dependency>
</project>

现在,如果你有很多子模块,你可以使用这个命令来保持你的反应器连贯:

mvn versions:set versions:commit -DnewVersion=1.1.0-SNAPSHOT 

这会将您所有的 POM 转换为版本1.1.0-SNAPSHOT(或您选择的任何版本),以便子 pom 中的父版本与根 POM 相同。巧合的是,这与发布插件在mvn release:prepare.


推荐阅读