问题描述
我有两个项目:父项目:A,子项目:B
在A /pom.xml中:
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>pom</packaging>
在B /pom.xml中,我有:
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
我想要B从父级继承版本,所以我需要把0.1-SNAPSHOT
放在A/pom.xml
中的唯一地方就是A/pom.xml
。但是,如果我从父节下的B/pom.xml
中删除<version>0.1-SNAPSHOT</version>
,maven会抱怨父级的缺少版本。
有没有办法我可以使用${project.version}
或类似的东西,以避免在两个poms中有01.-SNAPSHOT
?
最佳解决方案
不,没有。您必须指定父级版本。幸运的是,它被继承为模块的版本,在大多数情况下是理想的。此外,这个父母的版本声明由Maven Release Plugin自动触发,所以 – 实际上,只要你使用Maven Release Plugin发布或者只是碰撞版本,你就可以在2个地方使用版本。
请注意,在某些情况下,此行为实际上是可行的,并提供了更多的灵活性,您可能需要。有时你想使用一些以前的父母的版本来继承,但这不是主流的情况。
次佳解决方案
Maven不是以这种方式工作,而是为了实现这一目标而存在一种解决方法(可能是副作用,你将不得不尝试一下)。诀窍是告诉孩子项目通过它的相对路径而不是纯粹的maven坐标找到它的父项,而且外部化一个属性中的版本号:
父母pom
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>
<packaging>pom</packaging>
<properties>
<!-- Unique entry point for version number management -->
<global.version>0.1-SNAPSHOT</global.version>
</properties>
小孩pom
<parent>
<groupId>com.dummy.bla</groupId>
<artifactId>parent</artifactId>
<version>${global.version}</version>
<relativePath>..</relativePath>
</parent>
<groupId>com.dummy.bla.sub</groupId>
<artifactId>kid</artifactId>
我把这个伎俩用于我的一个项目一段时间,没有任何具体问题,除了maven在构建开始时记录了很多警告,这不是很优雅。
EDIT
似乎maven 3.0.4不允许这样的配置了。
第三种解决方案
最简单的更新版本imo的方法:
mvn versions:set -DgenerateBackupPoms=false
(在您的根/父pom文件夹中这样做)。
你的poms被解析,你被问到要设置哪个版本。
第四种方案
是的,但您也可以使用"mvn release:update-versions -DdevelopmentVersion={version}"
来更新POM中的版本号