有没有办法在不编辑POM的情况下更改版本号?
<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0</version>
我们有一个CI系统,我们想要发布每晚构建,但不使用Maven的-SNAPSHOT
解决方案,所以如果1.0.0
是当前版本,我们只想拥有{{1} }。
我建议使用像CI-NIGHTLY-BIULD-20120426
这样的东西,但显然不行。错误的解决方案是让CI服务器每次都编辑mvn deploy -Dversion=CI-NIGHTLY-BIULD-20120426
,但我认为这非常不方便。
谢谢!
答案 0 :(得分:7)
我建议使用分类器。
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version>
<properties>
<!-- default classifier is empty -->
<my.project.classifier></my.project.classifier>
</properties>
<build>
...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<classifier>${my.project.classifier}</classifier>
</configuration>
<executions>...</executions>
</plugin>
</plugins>
</build>
和
mvn package -Dmy.project.classifier=NIGHTLY-2012-04-26_02-30
Maven documentation说关于分类器:
分类器:你偶尔可以找到第五个元素 坐标,即分类器。我们将访问分类器 以后,但现在知道那些项目就足够了 显示为groupId:artifactId:packaging:classifier:version。
和
分类器允许区分构建的工件 相同的POM但内容不同。这是一些可选的 任意字符串 - 如果存在 - 附加到工件名称 就在版本号之后。作为这个元素的动力, 例如,考虑提供针对JRE的工件的项目 1.5但同时也是一个仍支持JRE 1.4的工件。第一个工件可以配备分类器jdk15和 第二个使用jdk14,客户可以选择使用哪个。
分类器的另一个常见用例是需要附加 项目主要工件的辅助工件。如果你浏览了 Maven中央存储库,你会注意到分类器的来源 和javadoc用于部署项目源代码和API文档 以及打包的类文件。
答案 1 :(得分:2)
我认为你也可以使用versions maven插件。我发现它对这样的事情非常有用。
你可以分2步完成:
mvn versions:set -DnewVersion=CI-NIGHTLY-BIULD-20120426
mvn deploy
mvn versions:revert
(正如Mark建议的那样)答案 2 :(得分:1)
我强烈建议您阅读Axel Fontaine的Maven Releases on Steroids(part 2,part 3)。这很棒,我很高兴使用它。
它不仅详细说明了您如何执行您的要求,还包含有关如何将构建版本与CI服务器绑定的良好建议。
简而言之,以下是要点:
您可以像
那样对项目版本进行参数化<version>${VERSION_NUMBER}</version>
...
<properties>
...
<VERSION_NUMBER>1.0-SNAPSHOT</VERSION_NUMBER>
...
</properties>
1.0-SNAPSHOT
在Jenkins / Hudson项目配置中,您使用
clean deploy scm:tag -DVERSION_NUMBER=${BUILD_NUMBER}
通过这种方式,您可以获得每个Jenkins构建的新版本,而不仅仅是每晚。
您可以更改配置以使用
clean deploy scm:tag -DVERSION_NUMBER=1.0.0-CI-NIGHTLY-BIULD-${BUILD_ID}
您将获得1.0.0-CI-NIGHTLY-BIULD-2012-04-26_12-20-24
答案 3 :(得分:-1)
您可以将版本号参数化为
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>${my.project.version}</version>
<properties>
<my.project.version>1.0</my.project.version>
</properties>
使用
从命令行驱动版本号mvn package -Dmy.project.version=NIGHTLY
虽然这是可能的,但Maven 3不鼓励它。