如何在Maven中使用平台架构来确定依赖?

时间:2011-07-20 12:55:28

标签: maven cross-platform nativelibrary

正如问题所述,在构建maven工件时,有一种很好的方法可以使用基于平台架构的依赖关系。我知道配置文件以及如何使用它们。出于这个特殊目的,我不想将它们合并到我的构建中。

详细问题可以描述如下:

  • 多模块maven项目
  • 持续集成,项目人员使用均匀分布的平台架构
  • 对本机系统库的依赖

我不想在设置中使用的解决方案:

  • 无依赖性冗余
  • 没有maven个人资料(或者至少是平台架构自动选择的maven个人资料)

作为示例

PERSON1

  • (使用linux i686)构建项目
  • x86库被捆绑到每个子项目,并且生成的文物正在构建

Person2

  • (使用win32)构建项目
  • 32位图书馆员捆绑如上

持续整合

  • 正在linux amd64上的生产环境中运行
  • 整合amd64库

编辑个人资料

我知道配置文件是实现此目的的一种解决方案。但我想要实现的是你从一些随机源版本控件中检出你的项目并使用开箱即用的本机库构建一个项目而不做任何事情(只要平台满足配置的那些要求)。

我不想配置这些配置文件设置,也不想明确地运行特定目标。如果有配置文件这样的东西,我想看一个自动确定平台架构并运行目标的示例。如果有一个没有配置文件,我会更喜欢它,因为它不太复杂,同时具有不同的配置文件组合(包括测试和其他用例)。

单独使用个人资料对我来说有点臃肿,需要手动操作。

我希望有人有一个简洁的建议,因为我不知何故坚持这个。

2 个答案:

答案 0 :(得分:21)

如果没有个人资料,我不知道有什么方法可以做到这一点。这是将配置文件添加到maven的主要用例。您可以使用以下方法执行此操作:

<profiles>
  <profile>
    <activation>
      <os>
        <name>Windows XP</name>
        <family>Windows</family>
        <arch>x86</arch>
      </os>
    </activation>
    ...
  </profile>
  <profile>
    <activation>
      <os>
        <family>Linux</family>
        <arch>x64</arch>
      </os>
    </activation>
    ...
  </profile>
  <profile>
    <activation>
      <property>
         <name>integration-test</name>
      </property>
    </activation>
    ...
  </profile>
</profiles>

然后,当有人签出项目并在Linux x64机器上构建它们时,它们将自动获取Linux x64配置文件下的所有内容。如果他们还在命令行上提供了属性-Dintegration-test,那么他们也会激活集成测试配置文件。您可以拥有任意数量的活动配置文件,这些配置文件可以组合在一起,为构建创建有效的POM。可以在您使用的所有项目的共享父POM中定义这些配置文件,因此开发人员无需更改其settings.xml文件。

要获取有关个人资料激活的更多信息,请查看:http://maven.apache.org/guides/introduction/introduction-to-profiles.html

答案 1 :(得分:1)

使用个人资料有什么问题?它们完全是针对这种情况而制作的。您可以通过OS / platform指定配置文件操作并添加依赖项。完全透明。

另一种方法是将核心库移动到一个单独的模块,并为每个平台配备一个模块。