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

Maven学习(十四)-----Maven 构建配置文件

Maven插件之portable-config-maven-plugin(不同环境打包)

跨不同的Maven插件共享配置

Xcode 项目:针对不同目标的不同语言

maven属性资源过滤profile不同环境构建项目