多个条件下的 Maven 配置文件激活
Posted
技术标签:
【中文标题】多个条件下的 Maven 配置文件激活【英文标题】:Maven profile activation with multiple conditions 【发布时间】: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 机器上中断。似乎不支持有两个这样的条件。是这样吗?我意识到我可能可以摆脱 <os/>
元素并获得我想要的结果,但是为了将来参考,有没有更好的方法来创建具有多个激活条件的配置文件?
【问题讨论】:
【参考方案1】:Maven <activation>
块是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>
这不起作用,因为只允许使用一个 <property>
标记。
关联 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 EL Profile Activator Extension这个很简单,看看source
Maven Profile Activation Extension这个有more options for the actual activation expression,包括Scala。
然而,由于它是一个扩展(不是插件),每个使用它的项目都必须注册该扩展。并且存在项目作者放弃它的风险,并且在未来的 maven 版本中将无法使用。
【讨论】:
以上是关于多个条件下的 Maven 配置文件激活的主要内容,如果未能解决你的问题,请参考以下文章