Maven:针对不同目标的不同配置

问题描述:

我想为Maven的发布插件的不同目标提供不同的配置选项。故事是这样的:Maven:针对不同目标的不同配置

我使用Git的SCM。我想要发行版:准备插件在本地执行所有操作,释放:执行将所有更改一次推送到远程存储库。

我试着做这样的事情:

<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> 

的1.7快照版本需要localCheckout =真在所有的工作(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> 

它们适用于这两种版本:准备以及释放:执行这是不期望的结果。

编辑

为了把事情说清楚:当我们使用Git供应链管理,我们希望让所有领导准备释放本地的,如果你把它也不是没有道理的操作考虑到本地Git存储库无论如何都是完整的repo。但是,当我们实际发布时,我们希望将所有更改推送到上游存储库,以便正确设置所有内容。

任何人都可以帮助我吗?

+0

你能解释一下多一点的要求来理解你的愿望吗? – khmarbaise 2012-02-24 12:10:49

首先我必须说,在release:prepare目标期间,所有更改都将在SCM中完成,而不是在release:perform目标中完成。所以问题是为什么要以这样复杂(非maven)的方式来做到这一点?

+1

只是为了扩展 - maven的第一条规则是你*不*以非maven的方式做事。它永远不值得。 – 2012-02-24 12:02:10

+0

此外,发布:发布是一个目标 - 不是按照Maven定义的阶段... – 2012-02-24 12:05:39

+0

@andrewcooke:设置插件提供的配置选项是一种非maven的做事方式?我没有完全掌握你所做的事情的意图。 – 2012-02-24 12:17:56

如果您需要更改,您必须在发布期间更改发布插件原因:执行(goal!)发布插件将检出项目的标记状态并调用其上的部署生命周期。所以这是行不通的。

编辑: 我已经检查了一个Git项目,并做了一个发布,它就像我解释。在发布期间:准备目标变更将被推送到远程存储库。在发布期间:执行目标不会将任何内容推送到远程存储库,只会执​​行克隆来检出标记的版本。

+0

你介意分享你使用的插件版本吗?我在mvn发布时正在观察推送权:准备。另外我使用Maven版本2.2.1 - 这可能是一个Maven版本问题? – 2012-02-24 15:34:43

+0

Ah ..sorry没有添加信息发布插件版本2.2.2,如果您使用的是Maven 2.2.1,您应该在您的pom或您的父pom中添加一个pluginManagement区域并定义发布版本。此外推出期间的推动:准备目标是好的。 – khmarbaise 2012-02-24 15:36:29

+0

呃..在发布过程中推送:准备就是我想要不发生的事情 - 因此所有的配置模糊。 – 2012-02-26 11:16:52