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

时间:2012-02-24 11:38:03

标签: maven-2

我想为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>

如果有人想知道,那么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>

它们同时适用于释放:准备和释放:执行不是预期的结果。

修改

为了说清楚:当我们使用Git for SCM时,我们希望所有操作都能导致本地发布的准备,如果你考虑到本地Git存储库是一个非常合理的话无论如何都要成熟的回购。但是,当我们进行实际发布时,我们希望将所有更改推送到上游存储库,以便正确设置所有内容。

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:0)

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

修改 我已经检查了Git项目,并对其进行了发布,正如我所解释的那样。在发布期间:准备目标将更改推送到远程存储库。在发布期间:执行目标不会将任何内容推送到远程存储库,只会执​​行克隆以检出标记的版本。

答案 1 :(得分:-1)

首先我必须说,在release:prepare目标期间,所有更改都将在SCM中完成,而不是在发布中:执行目标。所以问题是为什么要以这种复杂的(非专业的)方式来做呢?