1

我编写了一个自定义 maven 插件,它使用 svnkit 来检测是否有未提交的本地更改或者您的工作副本是否与 svn 存储库不同步,然后使 mvn 部署失败。

这是执行代码:

public void execute() throws MojoExecutionException, MojoFailureException {

    PluginDescriptor pd = (PluginDescriptor)getPluginContext().get("pluginDescriptor");
    MavenProject p = (MavenProject)getPluginContext().get("project");

    //init log
    Log log = getLog();
    SVNHelper.initLogger(log);

    //Throws MojoFailureException if there are uncommitted changes
    checkForUncomittedChanges(p.getBasedir(), log);

    //Throws MojoFailureException if the working copy is not up to date
    checkForWorkingCopyUpToDate(p.getBasedir(), log);
}

然后在使用插件的 pom.xml 中,我将它绑定到部署

该插件被正确调用,但在部署已经发生后构建失败。我可以移动要在安装阶段执行的插件,但在这种情况下我不希望安装显示构建失败,我只想停止部署。

有什么我想念的吗。

4

1 回答 1

0

给你两个建议:

  1. (我们这样做的方式)在 SVN 检查和配置 Nexus 安全性之后使用 Jenkins 进行构建,让 Jenkins 用户进行部署。这种方法不需要自定义插件(用户可以从 pom.xml 中删除)。

  2. 修改默认生命周期。

我猜你可能所做的只是使用@phase 配置Mojo 以使其在部署阶段触发。确保部署阶段的两个目标(deploy:deploy 和 your:goal)在同一个地方定义,然后确定执行顺序。

为此,您需要定义一个自定义生命周期 ( http://www.sonatype.com/books/mvnref-book/reference/writing-plugins-sect-plugins-lifecycle.html ) 并在 . 从来没有这样做过,我不知道您是否可以简单地覆盖默认/jar 生命周期,或者您是否必须创建自己的新包装类型。

如有疑问,请认真考虑建议 1。

于 2013-02-10T20:25:53.767 回答