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