基于项目的Maven版本构建-工件版本号

基于项目的Maven版本构建-工件版本号,maven,version,parent,maven-release-plugin,subproject,Maven,Version,Parent,Maven Release Plugin,Subproject,我有一个maven项目,其结构如下 Project - pom.xml --- Module1 --- pom.xml for Module1 --- Module2 --- pom.xml for Module2 --- Module3 --- pom.xml for Module3 ------- Module31 ------- pom.xml for Module31 ------- Module32 ------- pom.xml for Module32 项目 -pom.xml --

我有一个maven项目,其结构如下

Project - pom.xml --- Module1 --- pom.xml for Module1 --- Module2 --- pom.xml for Module2 --- Module3 --- pom.xml for Module3 ------- Module31 ------- pom.xml for Module31 ------- Module32 ------- pom.xml for Module32 项目 -pom.xml ---模块1 ---Module1的pom.xml ---模块2 ---Module2的pom.xml ---模块3 ---Module3的pom.xml -------模块31 -------Module31的pom.xml -------模块32 -------Module32的pom.xml i、 项目有它的pom.xml(包为pom)和模块。每个模块都有一个
部分,可以将其设置为“Project”的工件(在根pom.xml中定义),也可以将其设置为任何其他project2/project3/projectN工件

现在,由于这个原因,我看到Project1根pom.xml是否设置为0.0.1-SNAPSHOT,如果我想创建一个发布候选(非快照)构建“0.0.1”,那么我希望所有模块都应该生成与项目根pom.xml中设置的版本相同的工件

我注意到,Module2 pom.xml有一个父项目,它是另一个项目(例如:Project2),该父项目的版本id设置为“0.0.7-SNAPSHOT”,Module2 pom.xml(在project下)也有一些使用Project2工件的依赖项

Module3和Module32也存在相同的情况,其中
节具有不同的父项(设置为ProjectN,其中N可以是任意数字),并且依赖于这些或任何ProjectN项目的工件

我的问题:

1.如果我创建项目的0.0.1(非快照)版本,那么Maven将为根pom、Module1、Module2、Module3和Module31/32生成什么版本id工件?

2.如何确保Project的0.0.1版本为其所有模块生成相同的版本#0.0.1(即使这些模块的
部分使用不同的项目**N**并且在
部分中设置了不同/更新的
值)


谢谢。

看看,它确实是你想要的<代码>发布:prepare
是关于验证和更新POM,标记项目并为下一个开发周期做好准备<代码>发布:perform是基于标记构建项目,并将工件推送到远程存储库。

但是它有一些缺点。i、 它在发布过程中创建了两次构建。PS:在Maven release plugin链接中,它显示:多模块项目,您将被提示输入项目每个模块的版本号。如果希望每个模块获得与父POM相同的版本,可以将选项autoVersionSubmodules设置为true。现在,发布版本和下一个开发版本只会询问您一次!!!我试图找到moduleX的版本,它的父项是另一个项目n(但这个moduleX列在另一个项目的部分,比如“Project1”或“project”)。使用maven发布插件,当我使用-B运行mvn时,它给了我一个错误:由于未发布依赖项maven release plugin,无法发布project。如果我不使用-B(--batch mode)选项,那么mvn会多次提示我+我会得到pom文件中期望的值。如果项目的工件的版本高达0.0.4,我如何告诉mvn不要提示(-B)并确保发布版本更改为0.0.1而不是0.0.4。如果您的根pom聚合了module1,而module1的pom的父部分不是根pom的工件id,则会发生这种情况。Rob,请您就我的第二个项目符号问题提供建议。看起来您的项目结构应该更改。最佳实践是使多模块成为单个可发布实体。因此,如果某些模块有自己的发布周期,请将它们从该父级中删除,并可能将它们移动到另一个父级。