我可以通过仅设置RelPath

时间:2018-09-27 03:19:29

标签: maven pom.xml parent multi-module

我有一个多模块项目。

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

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

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

因此,每个模块都继承组,版本和通用属性,例如java编译器版本等。

但这似乎不是有效的行家。我必须指定父组,工件和版本。 (而不是工件ID)。

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

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

这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,可以,但是您需要使用第三方插件,即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,直接位于根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期间发布插件所采用的方法相同。