有没有办法从命令行配置Maven POM的版本?

Chr*_*wes 7 java continuous-integration maven-3 maven

有没有办法在不编辑POM的情况下更改版本号?

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0.0</version>
Run Code Online (Sandbox Code Playgroud)

我们有一个CI系统,我们想要发布每晚构建,但没有使用-SNAPSHOT Maven 的解决方案,所以如果1.0.0是当前版本,我们只想拥有CI-NIGHTLY-BIULD-20120426.

我建议用类似的东西mvn deploy -Dversion=CI-NIGHTLY-BIULD-20120426,但显然不是这样.糟糕的解决方案是让CI服务器pom.xml每次编辑,但我认为这是非常不方便的.

谢谢!

amr*_*mra 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>
Run Code Online (Sandbox Code Playgroud)

mvn package -Dmy.project.classifier=NIGHTLY-2012-04-26_02-30
Run Code Online (Sandbox Code Playgroud)

关于分类器的Maven 文档说:

分类器:您可能偶尔会在坐标上找到第五个元素,即分类器.稍后我们将访问分类器,但是现在只需知道这些类型的项目显示为groupId:artifactId:packaging:classifier:version.

分类器允许区分从相同POM构建但其内容不同的工件.它是一些可选的任意字符串 - 如果存在 - 将附加到版本号之后的工件名称.作为此元素的动机,请考虑一个项目,该项目提供针对JRE 1.5的工件,但同时也是一个仍支持JRE 1.4的工件.第一个工件可以配备分类器jdk15,第二个工件配备jdk14,以便客户端可以选择使用哪个.

分类器的另一个常见用例是需要将辅助工件附加到项目的主工件.如果浏览Maven中央存储库,您会注意到分类器源和javadoc用于部署项目源代码和API文档以及打包的类文件.