46

我正在努力在项目中设置 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/>元素并获得我想要的结果,但是为了将来参考,有没有更好的方法来创建具有多个激活条件的配置文件?

4

4 回答 4

48

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


更新:

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

于 2011-01-07T19:08:10.117 回答
16

最糟糕的是,您可以混合不同类型的条件,例如文件、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 年这只是一个耻辱!

于 2013-04-16T15:02:02.880 回答
13

刚刚被我修好了:)

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

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

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

于 2014-06-12T03:35:47.663 回答
0

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

但是,由于它是一个扩展(不是插件),因此每个使用它的项目都必须注册该扩展。并且项目作者有可能会放弃它,并且在未来的 maven 版本中将无法使用。

于 2019-07-19T18:20:53.043 回答