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

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

我的父 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'。

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

最佳答案

这可能对您没有帮助,但听起来像这个错误: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

您可以在这里找到更多信息:
  • In a Maven project, what are reasons for either a nested or a flat directory layout?
  • Child not finding parent pom in flat structured multi module maven build
  • 关于maven - 版本插件不更新子模块,只更新父模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12475220/

    相关文章:

    plugins - m2eclipse : Maven dependencies as JAR's not projects

    java - Maven和m2e-Eclipse-Plugin如何配合

    Eclipse Juno 的 Maven 插件 -> 在 .m2 下找不到 conf 目录

    java - Vaadin 7.1.1 : Failed to load the widgetset

    java - Ajax post无法找到URL,这导致java类带有注释。给出错误 404

    excel - 管理电子表格版本控制

    python - 如何通过Vim增加python文件的版本变量?

    java - 为什么项目布局资源与 Java 源代码分开?

    java - IntelliJ 检查给出 "Cannot resolve symbol"但仍编译代码

    java - 如何查看 Eclipse 内置插件的特定版本