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

标签 maven maven-release-plugin git-flow

关于已接受答案的注意事项:由于强有力的间接证据,我接受了答案。尽管如此,这是间接证据,因此请持保留态度。

当用户运行插件目标而不是生命周期阶段时,如何触发插件? (这个 has been asked 之前,但答案是使用生命周期阶段。)

例如:我需要 release:branch调用 regex-plugin生成一个以当前版本为名称的分支,减去 -SNAPSHOT 后缀。这就是我所拥有的,这需要开发人员激活配置文件并调用 verify阶段。我需要开发人员简单地调用 release:branch ,这又会导致 regex-plugin运行。与 Gitflow 有点联姻。

<profile>
    <id>Release Branch</id>
    <build>
        <plugins>
            <!-- On validate, compute the current version without -SNAPSHOT. -->
            <!-- Put the result in a property. -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>regex-property</goal>
                        </goals>
                        <configuration>
                            <value>${project.version}</value>
                            <regex>^(.*)-SNAPSHOT$</regex>
                            <replacement>$1</replacement>
                            <name>project.unqualifiedVersion</name>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Also on validate, run the branch plugin, and use -->
            <!-- the non-SNAPSHOT version thus computed in the branch name. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.3.2</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>branch</goal>
                        </goals>
                        <configuration>
                            <branchName>release/${project.unqualifiedVersion}</branchName>
                            <updateWorkingCopyVersions>true</updateWorkingCopyVersions>
                            <updateBranchVersions>false</updateBranchVersions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

意图是 release:branch将当前快照版本(例如 1.0.5-SNAPSHOT )移动到新分支中,该分支应以版本命名但没有多余的 -SNAPSHOT后缀(1.0.5)。当前分支应该采用新的快照版本( 1.1.0-SNAPSHOT ,而不是 1.0.6-SNAPSHOT ,因为我们希望版本 1.0.x 有空间用于修补程序,所以我们为分支保留它)(我没有自动下一个快照版本的计算尚未确定,因此,如果您使用 validate 运行上面的 Maven 配置,则必须在提示符下输入它)。

最佳答案

到目前为止提供的证据是相当间接的。我自己做了一些研究,所以最好在这里分享一下。以下是更多相同的“不可能”,或者是替代方案的构建 block 。

jetspeed:mvn plugin --- 运行指定序列的插件;要运行的配置可以通过系统属性进行更改; IDE 集成问题

Executing goals before plugin runs (StackOverflow) --- 在自定义 Mojo 的上下文中回答了相同的问题

Make Mojo run other goals (StackOverflow) --- 再次,从自定义 Mojo 的上下文中

Configuring default Mojo executions --- 描述 Mojos 如何运行的 Maven 页面 - 更多间接证据

Triggering phases before goal execution (StackOverflow) --- 迂回解决我的问题,不幸的回答是否定的

有趣的 : Guide to Ant plugin development --- 吸引我,因为虽然它需要编写自定义插件,但都是 Ant + Maven 配置,无需编译代码;可能进入阈值较低

Creating a parallel lifecycle --- 吸引人的方法,因为我可以完全控制生命周期的内容到它将使用 Gitflow 动词的位置;不清楚 IDE 将如何集成它;存在学习曲线和采用障碍问题

关于Maven:将插件执行绑定(bind)到另一个插件的执行,而不是生命周期阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264059/

相关文章:

git-flow:如何从原点 check out 发布分支?

git - 为什么 git-flow 快速转发我的功能分支 merge ?

java - 即使在构建过程中在 Maven 本地存储库中创建了依赖组件的 jar,也会查找自定义远程存储库

java - 当 war 部署到 AWS 时,HttpServletRequest 的正文为空

java - 运行 mvn clean install 时出现 Maven 错误?

maven - 在 Google Cloud Docker 构建中使用 Maven Artifact

java - 如何使用 Maven 构建同一项目的 2 个版本

Maven 发布插件 : Branch without snapshot in version

maven - 我怎样才能告诉 maven 以不同的 scm 用户身份发布

git - 无法通过在 SourceTree 中选择提交 ID 选项来启动功能分支