关于已接受答案的注意事项:由于强有力的间接证据,我接受了答案。尽管如此,这是间接证据,因此请持保留态度。
当用户运行插件目标而不是生命周期阶段时,如何触发插件? (这个 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/