在 release:prepare 和 release:perform 上激活配置文件

Posted

技术标签:

【中文标题】在 release:prepare 和 release:perform 上激活配置文件【英文标题】:Profile activation on both release:prepare and release:perform 【发布时间】:2012-04-03 14:05:52 【问题描述】:

我找不到在 release:preparerelease:perform(两者)目标上激活某些 Maven 配置文件的解决方案。像这样的:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-release-plugin</artifactId>
  <version>2.2.1</version>
  <configuration>
    <useReleaseProfile>false</useReleaseProfile>
    <goals>deploy</goals>
    <arguments>-Pmy-release</arguments>
  </configuration>
</plugin>

只是不起作用。我知道releaseProfiles 设置仅在release:perform 期间有效,所以我只是认为arguments 设置正是我想要的,但my-profile 配置文件在执行期间不活动。我做错了吗?

【问题讨论】:

【参考方案1】:

这似乎是一个重复的问题。请看一下这个问题,它有答案。 maven release plugin ignores releaseProfile

基本上 2.2.1 版的发布插件添加了一个 releaseProfiles 参数,允许您定义要在发布期间启用的配置文件。

http://maven.apache.org/plugins/maven-release-plugin/examples/perform-release.html

不幸的是,似乎有一个错误会阻止它做你想做的事......

编辑

我在这种情况下使用的一件事不是使用-P 参数,而是使用-Denv=release 通过环境设置触发配置文件。然后在 POM 中,我根据env 的值激活了配置文件。这一直对我有用。

【讨论】:

感谢您的回答,@nwinkler。 releaseProfiles 参数仅与release:perform 目标相关,因此在release:prepare 期间不起作用。而且,你是对的,它的行为无论如何都非常奇怪。您对-Dmy-release 变量的提示实际上是我当前的解决方法。我没有提到它是为了让我的问题直截了当,也没有提出任何思考的途径。然而,这似乎是目前唯一(或至少是最好的)方法。我已经尝试过2.3-SNAPSHOTmaven-release-plugin 版本,但仍然无法正常工作。伤心。【参考方案2】:

-Darguments="-PmyProfile" 似乎可以胜任。

【讨论】:

【参考方案3】:

因为 maven 发布插件会启动额外的实例,所以您必须指定额外的参数。给你的情况

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-release-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <arguments>$myReleaseArgs</arguments>
    </configuration>
</plugin>

和执行

mvn release:prepare release:perform -DmyReleaseArgs="-Pmy-release -DskipTests=true" -Pmy-release -DskipTests=true

是的,它必须被复制。

【讨论】:

【参考方案4】:

它可以在 Jenkins 中通过设置两个属性来激活 release:prepare 和 release:perform 的配置文件

<build>
  <plugins>
    <plugin>
      <artifactId>maven-release-plugin</artifactId>
      <version>2.5.1</version>
      <configuration>
        <releaseProfiles>myprofile</releaseProfiles>
        <arguments>-Pmyprofile</arguments>
      </configuration>
    </plugin>
  </plugins>
</build >

尽管上述方法效果很好,但我发现使用文件激活配置文件更有用。带有“主”配置文件的旧概念导致了一个问题,因为我在我的父 pom.xml 中有配置文件。这意味着,它在每个模块中都被任意激活。

为了解决这个问题,我使用了profile中的文件激活方法。它工作得更好,作为奖励,它简化了 Jenkins 中的发布。在 Eclipse 中,在命令行中,在 Jenkins 中,也就是无处不在,maven 会检测文件,并且不必配置 maven-release-plugin。此外,配置文件仅在正确的模块中处于活动状态。

【讨论】:

添加 &lt;arguments&gt;-Prelease&lt;/arguments&gt; 对我有用。即使在 maven-release-plugin-3.0.0-M3 中,&lt;releaseProfiles&gt;release&lt;/releaseProfiles&gt; 选项似乎也无济于事。

以上是关于在 release:prepare 和 release:perform 上激活配置文件的主要内容,如果未能解决你的问题,请参考以下文章

删除 mvn release:prepare 上的文件

如何正确使用 mvn release:prepare?

运行 mvn release:prepare 的 svn commit 问题

这是 mvn release:prepare 的问题吗

使用 mvn release:prepare,是不是可以指示 Maven 在提交命令的子模块 pom 位置中使用正斜杠?

使用eclipse执行maven-release-plugin插件发布jar异常问题(.project)(Cannot prepare the release because you have loc