Maven-如何/为什么/应该将父版本设置为基于父pom中定义的属性?
我有以下POM结构: /home/projects/parent/pom.xmlMaven-如何/为什么/应该将父版本设置为基于父pom中定义的属性?,maven,build,maven-2,maven-3,Maven,Build,Maven 2,Maven 3,我有以下POM结构: /home/projects/parent/pom.xml <project> <groupId>com.my.group</groupId> <artifactId>project-super-parent</artifactId> <version>${major.version}.${minor.version}</version> <packagin
<project>
<groupId>com.my.group</groupId>
<artifactId>project-super-parent</artifactId>
<version>${major.version}.${minor.version}</version>
<packaging>pom</packaging>
<properties>
<major.version>7</major.version>
<minor.version>5</minor.version>
<current.release.version>${major.version}.${minor.version}-SNAPSHOT</current.release.version>
...
</properties>
....
</project>
<project>
<groupId>com.my.group</groupId>
<artifactId>module1</artifactId>
<version>${current.release.version}</version>
<packaging>jar</packaging>
<parent>
<groupId>com.my.group</groupId>
<artifactId>project-super-parent</artifactId>
<version>${major.version}.${minor.version}</version>
<relativePath>../parent</relativePath>
</parent>
...
</project>
com.my.group
超级父项目
${major.version}.${minor.version}
聚甲醛
7.
5.
${major.version}.${minor.version}-快照
...
....
/home/projects/module1/pom.xml
<project>
<groupId>com.my.group</groupId>
<artifactId>project-super-parent</artifactId>
<version>${major.version}.${minor.version}</version>
<packaging>pom</packaging>
<properties>
<major.version>7</major.version>
<minor.version>5</minor.version>
<current.release.version>${major.version}.${minor.version}-SNAPSHOT</current.release.version>
...
</properties>
....
</project>
<project>
<groupId>com.my.group</groupId>
<artifactId>module1</artifactId>
<version>${current.release.version}</version>
<packaging>jar</packaging>
<parent>
<groupId>com.my.group</groupId>
<artifactId>project-super-parent</artifactId>
<version>${major.version}.${minor.version}</version>
<relativePath>../parent</relativePath>
</parent>
...
</project>
com.my.group
模块1
${current.release.version}
罐子
com.my.group
超级父项目
${major.version}.${minor.version}
../parent
...
请注意,模块不知道其父级的版本-它使用父级中定义的属性,因此这是一种鸡和蛋的问题
奇怪的是——这是可行的——所以当我想更改产品的主要版本时——我只更改一个pom文件(父文件)
该解决方案的局限性在于,我必须在文件系统中拥有所有POM文件
我的问题是:这是否可行?它到底是如何工作的?当我升级到maven 3时,它可能会停止工作吗?这是一种常用的解决方案还是滥用该系统
目前正在使用Maven 2.2.1和Java 7
这是一种常用的解决方案还是滥用该系统
这并不常见,至少我以前从未见过。在parent/pom.xml和module1/pom.xml中的版本控制将导致混淆。父系统发布了版本的7.5,而模块1有快照版本的7.5。如果7.5已经发布,则不应开发7.5-SNAPSHOT
避免重复的最简单方法是仅在父级中维护版本。您可以省略模块1中的版本声明。看看另一个项目,例如maven-3源代码。您将能够看到该版本仅在pom中声明,而不在其任何pom中声明
将帮助您处理版本升级并为您发布它们。忽略子pom中的版本元素会导致错误。 属性可以在主pom中使用,并且可以由子pom继承。当您运行主pom时,构建将获得成功。问题是
如果我们能够在将项目pom文件安装到本地存储库之前将其作为构建过程的一部分进行更新,这些问题可以得到解决这是如何工作的,因为如果我尝试您的父pom,它将完全失败。此外,我建议使用maven 3而不是maven 2。@khmarbaise它可以工作,我无法在这里放置实际的pom但是确实如此。Maven 3升级已在待办事项列表中:)很快就会到达