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

Mih*_*ila 22 maven maven-release-plugin git-flow

关于接受答案的说明:由于强有力的间接证据,我接受了答案.尽管如此,这是间接的证据,所以要带上一粒盐.


当用户运行插件目标而不是生命周期阶段时,如何触发插件?(之前已经问过,但答案是使用生命周期阶段.)

例证:我需要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>
Run Code Online (Sandbox Code Playgroud)

目的是release:branch将当前快照版本(例如1.0.5-SNAPSHOT)移动到一个新分支中,该分支应该以版本命名,但没有多余的-SNAPSHOT后缀(1.0.5).那么当前分支应该采取一个新的快照版本(1.1.0-SNAPSHOT1.0.6-SNAPSHOT,因为我们要释放1.0.x有空间的修补程序,所以我们保留它的分支)(我没有的一个快照版本自动计算想通了还,所以,如果您运行上面的Maven配置validate,则必须在提示时输入它).

Mih*_*ila 8

到目前为止提供的证据相当具有间接性.我已经做了一些自己的研究,所以我最好在这里分享一下.以下是更多相同的"它不可能",或者是替代品的构建块.

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


在插件运行之前执行目标(StackOverflow) ---在自定义Mojo的上下文中回答相同的问题


让Mojo再次从自定义Mojo的上下文中运行其他目标(StackOverflow)


配置默认Mojo执行 ---描述Mojos如何运行的Maven页面 - 更多间接证据


在目标执行之前触发阶段(StackOverflow) ---迂回解决我的问题,遗憾的是回答了否定


有趣的:引导到Ant插件开发 ---吸引我,因为,虽然它需要编写一个自定义插件,它是所有ANT + Maven配置,没有代码进行编译; 大概是进入门槛较低


创建并行生命周期 ---吸引人的方法,因为我可以完全控制生命周期的内容到使用Gitflow动词的位置; 不清楚IDE如何整合这个; 存在学习曲线和采用障碍问题


Nat*_*rot 5

不,你不能绑定到另一个插件的插件.只到一个阶段.

在Maven内部术语中,"Mojo"是可行的."插件"是包裹的mojos集合,因此您可以从POM中引用它们.Mojos仅与阶段结合.

插件开发文档:

插件描述符中指定的每个Mojo必须提供以下内容

...

phase ...如果用户未在POM中明确设置阶段,则定义绑定mojo执行的默认阶段.注意:当插件声明添加到POM时,此批注不会自动生成mojo.它只是使用户能够<phase>从周围<execution>元素中省略元素.

有关进一步确认,请参阅MojoExecution的源代码(此类JavaDoc没有用)并注意枚举的执行源有两种:

源自CLI直接调用目标的执行

源自绑定到生命周期阶段的目标的执行

没有其他方法可以启动执行意味着你运气不好(除非采取特殊措施,例如滚动你自己的插件,它结合了你想要链接的两个插件的效果,然后使用你的自定义插件).


归档时间:

查看次数:

9110 次

最近记录:

12 年,2 月 前