Maven 发布目标绑定

Posted

技术标签:

【中文标题】Maven 发布目标绑定【英文标题】:Maven release goals binding 【发布时间】:2013-03-03 11:08:02 【问题描述】:

我想写一个 redmine 插件来更新一些项目发布时的版本。为了避免手动步骤,我想绑定到一些发布插件执行目标。通常,我需要在选择版本号时创建一个新版本,在选择新版本之前关闭以前的版本,等等......

现在,我知道发布阶段不是典型生命周期的一部分,但我怀疑它们可以像其他阶段一样“挂钩”(例如集成前测试或集成后测试) .

这是我尝试过的:

<execution>
    <id>prepare-release-test</id>
    <phase>maven-release-plugin:prepare</phase>
    <goals>
        <goal>list-issues</goal>
        <goal>list-versions</goal>
        <goal>list-users</goal>
        <goal>list-projects</goal>
    </goals>

<execution> 
    <id>prepare-test</id>
    <phase>maven-release-plugin:2.0:prepare</phase>
    <goals>
        <goal>list-issues</goal>
        <goal>list-versions</goal>
        <goal>list-users</goal>
        <goal>list-projects</goal>
    </goals>

但这些都不起作用。当绑定到测试阶段时,它就可以正常工作了。

【问题讨论】:

prepare 是一个独立的聚合器目标(整个项目只执行一次),您不能将它“挂钩”到生命周期的任何阶段。您可能还需要考虑将您的插件目标声明为@aggregator 将其声明为聚合器有什么意义?我找到了发布插件的配置,允许在完成和准备时运行目标。也许这些就足够了。 抱歉,这里是链接:maven.apache.org/maven-release/maven-release-plugin/examples/… 【参考方案1】:

我知道发布阶段不是典型生命周期的一部分,但我怀疑它们可以像其他阶段一样被“挂钩”。

它们不是“阶段”。它们是“目标”,它们像阶段的唯一方式是您可以将它们的名称传递给 maven 执行。您不能像将目标绑定到阶段那样将目标绑定到其他目标。通常,您解决此问题的方法是定义一个您 activate manually or automatically 和 modifies the default lifecycle bindings 的配置文件。如果你想全力以赴,你也可以define your own lifecycle,但这似乎有点矫枉过正。但是,在发布插件的特定情况下,您还可以选择使用 preparationGoalsgoals 属性来分别自定义在 release:preparerelease:perform 期间发生的事情。

【讨论】:

是的,我在发布问题后立即看到了发布细节挂钩。它解决了我的部分问题。现在第一个问题的代码实际上在配置文件中,我可以在激活时将其绑定到 test 之类的东西,我现在正试图为发布目标找到合适的激活代码。我认为配置文件激活过程更适合我的需求。 仅供参考,还有completionGoals maven.apache.org/maven-release/maven-release-plugin/…

以上是关于Maven 发布目标绑定的主要内容,如果未能解决你的问题,请参考以下文章

Maven 生命周期的阶段与插件的目标之间的绑定关系

Maven:将插件执行绑定到另一个插件的执行,而不是生命周期阶段

如何清理 Maven 插件绑定?

maven install 与install:install 的区别

Maven 发布插件:不允许匹配“[xX][mM][lL]”的处理指令目标

Maven 发布插件在发布标签下添加主干文件夹以进行发布:准备目标