【发布时间】:2013-04-28 14:47:52
【问题描述】:
关于已接受答案的说明:我接受了该答案,因为有强有力的间接证据。尽管如此,这是间接证据,所以请持保留态度。
当用户运行插件目标而不是生命周期阶段时,如何触发插件? (这个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 配置,则必须在提示符下输入)。
【问题讨论】:
-
我支持你的评论,它不能完成,但我正在等待惊讶:)
-
是的,看起来不太好。这是另一个声称它不可行的答案:stackoverflow.com/a/15185774/1569108。听起来像是自定义生命周期的工作,或者我应该完全从 Maven 中拿走它,而改用 Ant 之类的东西,因为 Maven 对这种情况非常不友好。如果他们有一个始终运行的虚拟阶段,即使我们只运行一个插件目标,也足以解决这个问题而不会让人头疼。
-
整个 Maven 发布插件甚至可能是您通常不会绑定到生命周期阶段的目标。因此,它们可能在设计时专门考虑了在命令行上传递参数。奇怪的是,
prepare目标支持preparationGoals,这听起来就像您想要的branch目标一样。 -
这样就可以了,虽然我不喜欢
preparationGoals,因为它在其他高度结构化的文件格式中缺乏结构。 -
我认为在这种情况下它不会完成这项工作,因为它与
branch目标(而不是prepare目标)无关。
标签: maven maven-release-plugin git-flow