Maven:如果配置文件 B 未激活,则仅激活配置文件 A?

Posted

技术标签:

【中文标题】Maven:如果配置文件 B 未激活,则仅激活配置文件 A?【英文标题】:Maven: Only activate profile A if profile B is not activated? 【发布时间】:2011-11-12 18:28:41 【问题描述】:

我有两个 Maven 配置文件 profile-A 和 profile-B。只有在“A”未激活时才应激活“B”。 所以如果我打电话给

mvn install

profile-B 被执行(但不是 profile-A)。 但如果我打电话给

mvn install -Pprofile-A

然后只执行配置文件 A(但不执行配置文件 B)。

任何提示我需要如何编写我的 pom.xml 来实现这一点?

我已经尝试过了,但它不起作用:

<profiles>
  <profile>
    <id>profile-A</id>
    <activation>
      <activeByDefault>false</activeByDefault>
    </activation>
    ...
  </profile>

  <profile>
    <id>profile-B</id>
    <activation>
      <activeByDefault>true</activeByDefault>
      <property>
        <name>!profile-A</name>
      </property>       
      ...
    </activation>
    ...
  </profile>
</profiles>

【问题讨论】:

【参考方案1】:

我认为要使您的示例命令行按预期工作,您只需要配置文件 B 的 &lt;activeByDefault&gt;true&lt;/activeByDefault&gt;

http://maven.apache.org/guides/introduction/introduction-to-profiles.html 状态:

当 POM 中的配置文件在命令行上或通过其激活配置激活时,默认情况下处于活动状态的所有配置文件都会自动停用。

【讨论】:

只是想澄清一个让我困惑了大约 15 分钟的观点。从上述关于activeByDefault 的链接的最新版本(强调我的):“除非使用上述方法之一激活另一个配置文件在同一POM,否则此配置文件将自动对所有构建都有效。”就我而言,我已将配置文件 B 添加到父 POM,并将配置文件 A 添加到多模块构建中的叶 POM。在此配置中,当通过命令行激活配置文件 A 时,配置文件 B 未被禁用。将配置文件 A 和 B 移动到同一个 POM 会产生所需的行为。

以上是关于Maven:如果配置文件 B 未激活,则仅激活配置文件 A?的主要内容,如果未能解决你的问题,请参考以下文章

Maven:配置文件激活取决于 localRepository 属性?

Maven:如何根据子模块是不是包含文件来激活配置文件?

Maven - 根据属性激活子配置文件

多个条件下的 Maven 配置文件激活

为啥我不能从另一个配置文件激活 Maven2 配置文件?

使用文件存在忽略我的 Maven 配置文件中的激活(始终执行配置文件)