具有多个条件的Maven配置文件激活

问题描述 投票:40回答:3

我正在努力在项目中获取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机器上破解了。看起来像这样的两个条件不受支持。是这样的吗?我意识到我可能只是摆脱<os/>元素并获得我想要的结果,但是为了将来参考是否有更好的方法来创建具有多个激活条件的配置文件?

maven-2 pom.xml
3个回答
42
投票

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


Update:

现在已经修复了3.2.2 - sfussenegger(通过评论)


14
投票

最糟糕的是你可以混合不同类型的条件,例如文件,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>

这不起作用,因为只允许一个<property>标签。相关的JIRA:https://issues.apache.org/jira/browse/MNG-3328

上面描述的错误仍然是开放的... 5年只是一个耻辱!


12
投票

刚刚修好我:)

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

参考 - https://github.com/apache/maven/commits/masterMNG-4565搜索

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


0
投票

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

但是,由于它是扩展(不是插件),因此使用它的每个项目都必须注册扩展。并且存在项目作者将放弃它并且在将来的maven版本中不起作用的风险。

© www.soinside.com 2019 - 2024. All rights reserved.