Maven:针对不同目标的不同配置
Posted
技术标签:
【中文标题】Maven:针对不同目标的不同配置【英文标题】:Maven: Different configuration for different goals 【发布时间】:2012-03-14 20:45:38 【问题描述】:我想为 Maven 发布插件的不同目标提供不同的配置选项。故事是这样的:
我将 Git 用于 SCM。我希望 release:prepare 插件在本地完成所有操作,并且 release:perform 将所有更改一次推送到远程存储库。
我尝试过这样做:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<executions>
<execution>
<id>release-prepare</id>
<configuration>
<pushChanges>false</pushChanges>
</configuration>
<goals>
<goal>prepare</goal>
</goals>
</execution>
<execution>
<id>release-perform</id>
<configuration>
<localCheckout>true</localCheckout>
<pushChanges>true</pushChanges>
</configuration>
<goals>
<goal>perform</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.7-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
如果有人对此有疑问,localCheckout=true 需要 1.7-SNAPSHOT 版本才能正常工作 (http://jira.codehaus.org/browse/SCM-662)。
使用上面提到的设置,所有配置选项都被完全忽略,但是当我简单地指定这样的设置时:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<localCheckout>true</localCheckout>
<pushChanges>false</pushChanges>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.7-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
它们适用于 release:prepare 和 release:perform 这不是预期的结果。
编辑:
为了清楚起见:当我们将 Git 用于 SCM 时,我们希望所有的操作都会导致准备发布本地版本,如果您考虑到本地 Git 存储库是一个无论如何,成熟的回购。但是,当我们进行实际发布时,我们希望将所有更改推送到上游存储库,以便正确设置所有内容。
谁能帮帮我?
【问题讨论】:
您能再解释一下要求以了解您的愿望吗? 【参考方案1】:首先我必须说,在release:prepare 目标期间,所有更改都将在 SCM 中完成,而不是在 release:perform 目标中。所以问题是为什么要以如此复杂(非 maven)的方式来做呢?
【讨论】:
只是为了扩展它 - maven 的第一条规则是你不要以非 maven 的方式做事。这是不值得的。 此外,发布:发布是一个目标——而不是根据 Maven 定义的阶段...... @andrewcooke:设置插件提供的配置选项是一种非 Maven 的做事方式吗?我没有完全理解你的意图。 哦,对不起。我没有意识到这可以通过设置配置选项来解决。【参考方案2】:如果您需要更改,您必须在发布期间更改发布插件原因:执行(目标!)发布插件将检查项目的标记状态并在其上调用部署生命周期。所以这行不通。
编辑: 我已经检查了一个 Git 项目并对其进行了发布,正如我所解释的那样。在 release:prepare 目标期间,更改将被推送到远程存储库。在 release:perform 目标期间,不会将任何内容推送到远程存储库,只会进行克隆以签出标记的版本。
【讨论】:
您介意分享您正在使用的插件版本吗?当我执行 mvn release:prepare 时,我正在观察一个推送。我也在使用 maven 版本 2.2.1 - 这可能是 maven 版本问题吗? 啊 ..sorry 没有添加信息 release-plugin version 2.2.2 如果你使用的是 Maven 2.2.1 你应该在你的 pom 或者你的父 pom 中添加一个 pluginManagement 区域并定义发布。此外,发布期间的推送:准备目标是可以的。 好吧.. 发布期间的推送:prepare 正是我不想发生的——因此所有的配置都是模糊的。 该插件的配置明确指出有两种配置选项:一种用于使用本地存储库检查发布版本,另一种用于停止 maven 将更改推送到远程存储库。这些设置可用于目标、准备和发布。我想探索在发布真正发生时完成发布的选项,但显然存在问题。我最终做了一个 3 阶段发布:一切都在本地完成,直到我手动将更改推送到远程存储库。以上是关于Maven:针对不同目标的不同配置的主要内容,如果未能解决你的问题,请参考以下文章
Maven 站点:在“部署”目标期间(在测试配置文件中)部署(使用不同的 url)?