关于接受答案的说明:我接受了答案,因为有充分的间接证据。尽管如此,这是一个间接的证据,所以要带上一粒盐。
当用户运行插件目标而不是生命周期阶段时,如何触发插件? (此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
有空间用于修补程序,因此我们为分支保留它)(I没有计算出下一个快照版本的自动计算,因此,如果您使用validate
运行上面的Maven配置,则必须在提示时输入它。
答案 0 :(得分:8)
到目前为止提供的证据相当具有间接性。我已经做了一些自己的研究,所以我最好在这里分享一下。以下是更多相同的“它是不可能的”,或者是替代品的构建块。
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如何整合这个;存在学习曲线和采用障碍问题
答案 1 :(得分:5)
不,你不能将插件绑定到另一个插件。只到一个阶段。
在Maven内部术语中,“Mojo”是可行的。 “插件”是包裹的mojos集合,因此您可以从POM中引用它们。 Mojos只与阶段结合。
来自plugin development documentation:
插件描述符中指定的每个Mojo必须提供以下内容
...
阶段 ...如果用户未在POM中明确设置阶段,则定义将mojo执行绑定到的默认阶段。注意:当插件声明添加到POM时,此批注不会自动生成mojo。它只允许用户从周围的
<phase>
元素中省略<execution>
元素。
有关进一步确认,请参阅MojoExecution的来源(此类JavaDoc无效)并注意枚举的执行源有两种:
源自CLI直接调用目标的执行
和
源自绑定到生命周期阶段的目标的执行
没有其他方法可以启动执行意味着你运气不好(除非采取非常的措施,例如滚动你自己的插件,它结合了你想要链接的两个插件的效果,然后使用你的自定义插件)。