版本插件不更新子模块,只是父更新

时间:2012-09-18 10:32:52

标签: maven versioning m2eclipse project-structure versions-maven-plugin

我有父pom,模块定义如下:

parent pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    <modelVersion>4.0.0</modelVersion>
    <groupId>parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.2-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>../proj1</module>
        <module>../proj2</module>
    </modules>

</project>

以下是子模块pom文件:

proj2 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0     http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <groupId>proj2</groupId>
    <artifactId>proj2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
</project>

proj1 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmln:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
     http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

    <groupId>proj1</groupId>
    <artifactId>proj1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
</project>

但是当我使用版本插件时,它只设置父版本号而不是其模块。 这是我正在使用的命令:

versions:set -DnewVersion=1.0.2-SNAPSHOT

这是输出:

[INFO] proj1 ...................................... SKIPPED
[INFO] proj2 ...................................... SKIPPED
[INFO] parent ......................................SUCCESS

正在跳过子模块。如何才能使子模块也更新,而不仅仅是父模块?

更新:我已经尝试从子模块中删除版本标签,因此子模块现在是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

  <groupId>proj2</groupId>
  <artifactId>proj2</artifactId>
  <packaging>war</packaging>
</project>    


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
        <groupId>parent</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.2-SNAPSHOT</version>
        <relativePath>../parent/pom.xml</relativePath>
    </parent>

  <groupId>proj1</groupId>
  <artifactId>proj1</artifactId>
    <packaging>war</packaging>
</project>   

但是,在子pom文件中没有更新版本号。

更新:以下是我认为此过程有效的方法,请随时提出修改建议:

理论上(我没有测试过)在嵌套文件结构中,当目标:'ons:set -DnewVersion = 1.0.2-SNAPSHOT'运行时,Maven将更新每个子模块的各个版本号。

但是,在平面文件结构中,如果父模块具有相同版本,则不需要在子模块中指定版本号。这是因为如果未设置子版本号将使用父版本号。因此,要更新父模块的所有子模块,只需更新父模块的版本数,如果所有子模块都没有设置版本号,那么它们将具有与父模块相同的版本号。

3 个答案:

答案 0 :(得分:2)

这可能对您没有帮助,但听起来像这个错误:JIRA MRELEASE-261 : release:prepare should support flat directory multi-module projects

不建议使用扁平结构。这是(Eclipse?)开发人员的“老实践”。我用了很长时间,然后发现了Maven方法的好处。

旧方式:

parent
`-- pom.xml
submodule 1
`-- pom.xml
submodule 2
`-- pom.xml

Maven方式:

parent
|-- submodule 1
|   `-- pom.xml
|-- submodule 2
|   `-- pom.xml
`-- pom.xml

您可以在此处找到更多信息:

答案 1 :(得分:1)

好的,现在如果您的子模块引用父pom,您可以从子模块poms中删除版本标记,这样它们的版本将从父pom继承。

由于版本是从pom继承的,因此当您使用版本插件时,所有模块都将具有相同的版本。

答案 2 :(得分:0)

parent/运行命令。