【问题标题】:Can I have a maven parent project by just setting RelPath我可以通过设置 RelPath 来拥有一个 Maven 父项目吗
【发布时间】:2018-09-27 03:19:29
【问题描述】:

我有一个多模块项目。

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

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

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

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

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

当我对项目的版本进行碰撞时,我必须进入每个子模块来碰撞父模块的版本。

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

这可能吗?

【问题讨论】:

    标签: maven pom.xml parent multi-module


    【解决方案1】:

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

    假设您有以下布局:

    根 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 期间采用的方法相同。

    【讨论】:

    • 什么是第三方插件?感谢您的回答!
    • 对不起,我应该更清楚。我在编辑中添加了对该插件的引用。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2011-11-19
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多