【问题标题】:Modifying artifact version in a Maven Mojo在 Maven Mojo 中修改工件版本
【发布时间】:2013-12-31 17:49:22
【问题描述】:

刚开始接触 Maven 并构建自定义 Mojos。希望有人可以在这里提供帮助。

一般的想法是我想在不修改POM本身的情况下修改POM中的版本。我将使用此功能将限定符添加到已部署版本的末尾。例如,我可能将1.0 更改为1.0-SNAPSHOT1.0-RELEASE1.0.123(基于最新的增量版本)或1.0-a1b2c3d(基于Git 提交哈希)。这里的目标是开发人员不必担心更改版本号(当它无关紧要时),而是由构建来处理。

所以我正在尝试将版本号更新为initialize 阶段的一部分,但它并没有出现在我期望的所有地方。这是我的魔咒:

package com.tomkel.maven;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;

/**
 * This goal overrides the current artifact version
 *
 * @goal overrideVersion
 *
 * @phase initialize
 */
public class VersionOverrideGoal
    extends AbstractMojo
{
    /**
     * @parameter default-value="${project}"
     */
    private MavenProject mavenProject;

    /**
     * Run the Mojo
     * @throws org.apache.maven.plugin.MojoExecutionException
     */
    public void execute()
        throws MojoExecutionException
    {
        this.mavenProject.setVersion("TRY_THIS");
        this.mavenProject.getArtifact().setVersion("TRY_THIS_TOO");
    }

}

但是当我将它包含在我的项目的 POM 中时:

<plugin>
    <groupId>com.tomkel</groupId>
    <artifactId>tk-version-override-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>overrideVersion</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然后我在项目构建的install 阶段看到这样的东西:

[INFO] Building jar: /home/tkelley/git/tomkel/some-project/target/some-project-1.2.3.jar
[INFO] 
[INFO] --- maven-install-plugin:2.3:install (default-install) @ some-project ---
[INFO] Installing /home/tkelley/git/tomkel/some-project/target/some-project-1.2.3.jar to /home/tkelley/.m2/repository/com/tomkel/some-project/TRY_THIS_TOO/some-project-TRY_THIS_TOO.jar
[INFO] Installing /home/tkelley/git/tomkel/some-project/pom.xml to /home/tkelley/.m2/repository/com/tomkel/some-project/TRY_THIS_TOO/some-project-TRY_THIS_TOO.pom

因为工件是作为 some-project-1.2.3.jar 构建的,所以我的存储库 (nexus) 将其添加为版本 1.2.3。但这不是我想要的——我希望将其添加为 TRY_THIS_TOO

我在这里做错了吗?

如果有帮助,我已将 Mojo 代码、POM 和构建日志放入此处的 Gist 中:https://gist.github.com/tomkel5/8199801

提前致谢!

【问题讨论】:

  • 为什么要这样做?
  • @jtahlborn 主要原因是:我们的构建系统构建了来自 Github 的提交和 [未提交的] 拉取请求。在构建实际提交时,我希望它构建和部署普通版本,但在构建拉取请求时,我想构建和部署快照。

标签: java maven versioning lifecycle mojo


【解决方案1】:

听起来您想使用Versions Maven Plugin 来管理您的版本控制。

【讨论】:

  • 我尝试使用setrevert 目标,但我需要在revert 之后 deploy 阶段。 deploy 是最后阶段,所以我不确定在它之后如何执行。
  • @ThomasKelley 为什么不能在deploy 阶段触发revert 目标?在package 阶段之后,Maven 无法影响打包工件中的内容,因此它会将 POM 留在带有 SNAPSHOT 版本的包内,但仍会还原源 POM。换句话说,将打包的工件上传到某处(deploy)和还原源 POM 的过程是相互独立的,因此可以并行执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2011-02-12
  • 2011-02-11
相关资源
最近更新 更多