【问题标题】:Maven profile activation with multiple conditions多个条件下的 Maven 配置文件激活
【发布时间】:2011-06-05 11:23:42
【问题描述】:

我正在努力在一个项目中安装 rpm-maven 插件。在我们的暂存和生产环境中,构建发生在 Red Hat 机器上,但我们有几个用于开发和测试的 Windows 机器,所以我希望 RPM 构建过程成为配置文件的一部分,该配置文件仅在具有rpmbuild 已安装。

这是我第一次尝试激活条件:

<activation>
  <os>
    <family>unix</family>
  </os> 
  <file>
    <exists>/usr/bin/rpmbuild</exists>
  </file>
</activation>

我最初的测试只涉及在 Windows 机器上构建和在 CentOS 机器上构建,两者都给了我预期的结果。后来,该构建在没有可用 rpmbuild 的 Linux 机器上中断。似乎不支持有两个这样的条件。是这样吗?我意识到我可能可以摆脱 &lt;os/&gt; 元素并获得我想要的结果,但是为了将来参考,有没有更好的方法来创建具有多个激活条件的配置文件?

【问题讨论】:

    标签: maven-2 pom.xml


    【解决方案1】:

    Maven &lt;activation&gt; 块是OR 的列表——一旦满足第一个条件,配置文件就会被激活。因此,至少在此错误报告得到修复之前,您的问题不太可能有解决方案https://issues.apache.org/jira/browse/MNG-4565


    更新:

    现在已在 3.2.2 中修复 – sfussenegger(通过评论)

    【讨论】:

    • 我担心这就是答案。谢谢! :)
    • @bhinks 但它没有意义。可悲的是,Maven:权威指南说它的行为应该是AND——但事实并非如此。
    • 现在在 3.2.2 中修复了
    • 因为我在谷歌上所做的每一次搜索都会弹出这个 SO。如果你想做一个 OR 你怎么做?例如,如果他们使用命令 -Ddeep-clean 或 -Dlight-clean,我想激活。从 3.2.2 开始,这不再可能了吗?
    • @dtracers 好问题!在这种情况下,我应该如何配置“OR”逻辑。 Maven 改变了处理属性的逻辑,现在不可能做“OR”。解决一个问题 - 创建另一个问题?
    【解决方案2】:

    最糟糕的是,您可以混合不同类型的条件,例如文件、jdk 和属性,如 http://www.sonatype.com/books/mvnref-book/reference/profiles-sect-activation.html 所述,但您甚至不能放置两个相同类型的条件,例如两个属性

    <activation>
        <property>
               <name>integrationTest</name>
        </property>
        <property>
            <name>packaging</name>
            <value>swf</value>
        </property>
     </activation>
    

    这不起作用,因为只允许使用一个 &lt;property&gt; 标记。 关联 JIRA:https://issues.apache.org/jira/browse/MNG-3328

    并且上面描述的错误仍然存​​在...... 5 年它只是一个耻辱!

    【讨论】:

    • 7 年了!刚投了票。不要认为它会改变什么。
    • 9 年而且还在继续。
    • 我基本上已经放弃了配置文件激活逻辑,只是制作了一个 shell 脚本来确定要激活的配置文件,然后使用-P"someProfile,!someOtherProfile" 将它们传递给 maven,这使得属性和环境变量检测完全毫无价值。
    【解决方案3】:

    刚刚被我修好了:)

    从 3.2.2 开始,它将按预期工作:多个条件将被与

    参考 - https://github.com/apache/maven/commits/master,通过 MNG-4565 搜索

    提交网址 - https://github.com/apache/maven/commit/c6529932f9e3efdfc86ed73f59a307a8f8b6ea5f

    【讨论】:

    • 希望 OR 或 AND 都是选项。不幸的是 OR 刚刚被 AND 删除。
    • @mdo123,这可能就是应该这样做的,是的。以某种方式将其贡献给 maven 应该是个好主意
    • 您能否提供实际的提交 URL(基于提交哈希)?现在 3.5 年后,这将需要大量的提交!
    【解决方案4】:

    我认为这就是这些 Maven 扩展的作用:

    然而,由于它是一个扩展(不是插件),每个使用它的项目都必须注册该扩展。并且存在项目作者放弃它的风险,并且在未来的 maven 版本中将无法使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 2018-07-03
      • 2014-10-29
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      相关资源
      最近更新 更多