2017-07-27 47 views
1

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

Maven的轮廓通常用于有条件地包括根据os.family依赖性os.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,在我的精确情况下)作为条件,而无需为每个值创建单独的配置文件?

+0

据我所知您可以构建包含不同平台/体系结构等的产品,并启动该产品一个合适的平台会自动选择正确的工件。 OSGi? – khmarbaise

+0

你有没有关于它在实践中如何工作的更多细节?任何例子可能?提前致谢! –

回答

0

haven't测试,但有一个拱形x86

看到Maven的文档....

Maven Profiles

maven enforcer plugin

os arch variables

+0

我的测试机器(Ubuntu 16.04)在Maven 3.3.9中返回Arch:“i386”。该项目不编译 x86但它适用于 i386。 –

+0

hm ok另一种方法...怎么样定义一个必需的系统属性,这可能是一个脱节... http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html –

+0

是的,设置一个系统属性确实是我想要进一步调查的解决方案。我见过os.arch将有条件地重新定义为“x86”,这是丑陋的恕我直言。在我的Gradle脚本中,我通常使用一个简单的数组重映射,它只需要两行Groovy代码。就目前而言,我不明白在Maven中如何以简短优雅的方式完成这项工作...... –

相关问题