【问题标题】:Maven profile activation using a list of mutually exclusive values使用互斥值列表激活 Maven 配置文件
【发布时间】:2017-07-27 20:36:31
【问题描述】:

我正在开发一个依赖于 SWT 的项目。它使用 Maven 作为构建工具和依赖管理系统。因为 SWT 是平台依赖的,所以我需要告诉 Maven 应该使用哪个平台的依赖。

Maven 配置文件通常用于根据 os.familyos.arch 属性有条件地包含依赖项,如下所示:

<profiles>
  <profile>
    <id>Linux-x86</id>
    <activation>
      <os>
        <family>linux</family>
        <arch>i386</arch>
      </os>
    </activation>
    <dependencies>
      <dependency>
        <!-- some platform-specific dependency goes here -->
      </dependency>
    </dependencies>
  </profile>
</profiles>

问题在于 os.arch 可能有几个不同的值 - “i386”、“i486”、“i586”等,但在 SWT 世界中,它们都映射到“x86” .

是否有可能在 Maven 中指定一个互斥的值列表(在我的精确情况下为 os.arch)作为条件,而无需为每个值创建单独的配置文件?

【问题讨论】:

  • 据我所知,您可以构建一个包含不同平台/架构等的产品,并在适当的平台上启动该产品将自动选择正确的工件.. ? OSGi ?
  • 您对它在实践中的工作方式有任何进一步的详细信息吗?有什么例子吗?提前致谢!

标签: maven dependencies platform-specific


【解决方案1】:

尚未测试,但有一个拱门x86

查看 Maven 文档 ....

Maven Profiles

maven enforcer plugin

os arch variables

【讨论】:

  • 我的测试机 (Ubuntu 16.04) 在 Maven 3.3.9 中返回 Arch: "i386"。该项目不能使用 x86 编译,但可以使用 i386
  • hm 好的另一种方法...如何定义所需的系统属性,这可能是一个析取...maven.apache.org/enforcer/enforcer-rules/requireProperty.html
  • 是的,设置系统属性确实是我想要进一步研究的解决方案。我在某处看到 os.arch 将有条件地重新定义为“x86”,恕我直言,这是丑陋的。在我的 Gradle 脚本中,我通常使用一个简单的数组重新映射,它只需要两行 Groovy 代码。目前,我看不到如何在 Maven 中以简洁而优雅的方式完成它......
猜你喜欢
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 2011-11-12
  • 2014-10-29
  • 2017-10-11
  • 2015-03-30
相关资源
最近更新 更多