我有父pom,模块定义如下:
<?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文件:
<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>
<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将更新每个子模块的各个版本号。
但是,在平面文件结构中,如果父模块具有相同版本,则不需要在子模块中指定版本号。这是因为如果未设置子版本号将使用父版本号。因此,要更新父模块的所有子模块,只需更新父模块的版本数,如果所有子模块都没有设置版本号,那么它们将具有与父模块相同的版本号。
答案 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/
运行命令。