3

我有一个根 pom.xml,它充当多个子 pom.xml 文件的父级,如果您有一个或两个子 pom.xml 文件,那就太好了。我正在开发一个包含 50 多个子 pom.xml 文件的项目,并且同时发布了多个版本。一切都很好,直到我需要更新父 pom.xml 文件的版本,这可能很乏味。有没有办法将父 pom.xml 的版本级联到所有子 pom.xml 文件?

我的想法是在当前版本的父 pom.xml 中创建一个属性,但这不起作用。

编辑

这是我的孩子 pom.xml 文件中的一个示例:

<parent>
    <groupId>myGroup</groupId>
    <artifactId>myArtifactId</artifactId>
    <version>1.0</version>  <!-- This is the value that I would like to parameterize in my child pom.xmls -->
    <relativePath>../../pom.xml</relativePath>
</parent>

顺便说一句,我正在使用 Maven 3.0.3

4

5 回答 5

2

我假设你有这样的事情:

+--root (pom.xml)
     +--- module1 (pom.xml)
     +---

在根 pom.xml 中:

<project ..>

  <groupId>the.company.project</groupId>
  <artifactId>the-artifact</artifactId>
  <version>1.0-SNAPSHOT</version>
  ...
</project>

而在孩子们中,您应该拥有:

<project ..>

  <parent>         
    <groupId>the.company.project</groupId>
    <artifactId>the-artifact</artifactId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>the-artifact-child</artifactId>

</project>

为此,您应该使用maven-release-plugin来处理 root 和 childs 中的版本更新。如果您不使用 maven-release-plugin,您可以使用可以处理相同事情的versions-maven-plugin 。

于 2013-04-22T14:44:48.537 回答
2

你可以这样做:

有一个聚合器 POM 项目,您可以在其中指定所有子模块,然后在此聚合器项目上运行此目标:

mvn versions:update-parent

这将使用新的父版本更新所有子模块。

或者,您可以在每个版本之前使用相同的:准备子模块的目标,从而避免创建聚合器模块。

所以如果你想发布一个子模块,你只需运行这个目标:

mvn versions:update-parent release:prepare

这将确保父级在准备发布之前使用新版本进行更新。

我在您的评论中读到您缺少 scm 标签。颠覆情况下的使用示例可能是:

<scm>
    <developerConnection>scm:svn:https://your.domain/scm/svn/yourModule/trunk/</developerConnection>
</scm>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <configuration>
                <tagBase>https://your.domain/scm/svn/yourModule/tags</tagBase>
            </configuration>
        </plugin> 
    </plugins>
</build>

如果没有正确配置的 scm,Release 插件将无法工作。

如果您在 svn 存储库中遵循“主干、标签、分支”最佳实践,则无需在发布插件中配置 tagbase 标签,请参阅此答案。

于 2014-10-17T10:36:34.587 回答
2

我遇到了同样的问题,我所做的与目前所建议的略有不同。假设您的项目具有以下文件夹结构:

parent
+-- child1
     +-- child2_of_parent
     +-- child3_of_parent
+-- child4
     +-- child5_of_child4

请注意,除此之外child5_of_child4所有其他项目都将顶级项目作为父项目parent。这与文件夹结构无关。家长pom.xml

<groupId>...</groupId>
<artifactId>...</artifactId>
<version>1.1-SNAPSHOT</version>

pom.xml除此以外的所有孩子child5_of_child4都作为父母child4

 <parent>
  <groupId>...</groupId>
  <artifactId>parent</artifactId>
  <version>1.1-SNAPSHOT</version>
  <relativePath>../parent</relativePath>
 </parent>

您转到父目录并将其版本从 version 从 更改1.1-SNAPSHOT1.2-SNAPSHOT。然后你做(更多细节在这里):

mvn versions:update-child-modules

由于这不是递归的,它仅适用于您父项目的直接子项目。换句话说,所有子模块都将更新为指向父模块,1.2-SNAPSHOT除了child5_of_child4.

于 2017-12-28T13:37:39.943 回答
1

在您的孩子 pom.xml 中:

<parent>
    <groupId>groupId</groupId>
    <artifactId>parent.artifactId</artifactId>
    <version>version</version>
    <relativePath>../parent-pom</relativePath>
 </parent>
 <artifactId>child.artifactId</artifactId>
于 2013-04-22T14:44:29.560 回答
-1

只是不要将版本放在子 poms 中。它是自动继承的。如果您在那里编辑,它将在 Eclipse 插件中显示为警告。

于 2013-04-22T15:39:17.440 回答