多条件激活Maven配置文件

49

我正在努力为项目设置rpm-maven插件。在我们的暂存和生产环境中,构建发生在红帽计算机上,但是我们有几台用于开发和测试的Windows计算机,因此我希望RPM构建过程成为仅在安装了rpmbuild的计算机上处于活动状态的配置文件的一部分。

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

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

我的最初测试只涉及在Windows和CentOS机器上构建,并且两者都给了我期望的结果。后来,在一个没有rpmbuild可用的Linux机器上,构建失败了。看起来这样有两个条件的情况不被支持。是这样吗?我意识到我可能只需摆脱<os/>元素并获得想要的结果,但是为了以后的参考,是否有更好的方法可以创建具有多个激活条件的配置文件?

4个回答

49

Maven的<activation>块是一个OR列表——只要满足第一个条件,配置文件就会被激活。因此,在这个错误报告得到修复之前,至少很少有可能解决你的问题。https://issues.apache.org/jira/browse/MNG-4565


更新:

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


6
很遗憾,"Maven:权威指南"书中指出它的行为应该是“AND”,但事实并非如此。 - Nishant
5
自从我在谷歌上进行搜索时,每次都会出现这个 SO。如果您想使用 OR,该怎么做?例如,我希望在使用命令-Ddeep-clean或-Dlight-clean时激活它。自从3.2.2版本以后,这还有可能吗? - dtracers
1
@dtracers 很好的问题!在这种情况下,我应该如何配置“OR”逻辑。Maven改变了处理属性的逻辑,现在不可能做到“OR”。解决一个问题 - 创造另一个问题? - Ilya Buziuk
@dtracers,事实是,它一直是个问题,应该有不同的工作方式,现在是时候创建问题,允许制作不同的激活方式,包括OR和AND。 - Mysterion
@dtracers - 我希望他们能够采用更强大的激活条件语法。与此同时,一个权宜之计是在settings.xml中放置两个配置文件,每个配置文件具有不同的激活条件(一个用于-Ddeep-clean,另一个用于-Dlight-clean),并且每个配置文件都设置一个属性(light-clean-or-deep-clean?),您可以使用该属性来激活pom中的配置文件,以进行真正的配置。 - Mark Adelsberger

18

最糟糕的情况是你可以混合不同类型的条件,例如文件、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年了,真是太遗憾了!


3
已经7年了!刚刚投了赞成票。不认为这会改变什么。 - jFrenetic
4
9年了,仍在继续。 - Gilberto Torrezan
1
我已经放弃了配置激活逻辑,只是编写了一个shell脚本来确定要激活的配置文件,然后使用-P"someProfile,!someOtherProfile"将它们传递给Maven,这使得属性和环境变量检测完全无用。 - Adam Gent

14

12
希望有“或”和“和”两个选项。遗憾的是,“或”被替换成了“和”。 - mdo123
@mdo123,那可能是正确的做法。最好将其某种方式贡献给Maven。 - Mysterion
2
你能提供实际的提交URL吗(基于提交哈希)?现在过去了3.5年,需要查找的提交很多! - Adam Burley

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接