4

我的父 pom 的模块定义如下:

父 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 文件中没有更新版本号。

更新:这是我认为这个过程的工作方式,请随时提出修改建议:

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

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

4

3 回答 3

2

这可能对您没有帮助,但听起来像这个错误:JIRA MRELEASE-261:release:prepare 应该支持平面目录多模块项目

不推荐扁平结构。这是(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

您可以在这里找到更多信息:

于 2012-09-18T12:35:34.200 回答
1

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

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

于 2012-09-18T11:28:41.960 回答
0

从 运行命令parent/

于 2014-01-23T09:26:38.087 回答