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

fyr*_*fyr 18 cross-platform maven

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

详细问题可以描述如下:

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

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

  • 没有依赖冗余
  • 没有maven配置文件(或者至少是平台架构自动选择的maven配置文件)

举个例子:

PERSON1

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

PERSON2

  • (使用win32)构建项目
  • 如上所述捆绑了32位库

持续整合

  • 在linux amd64上像生产环境一样运行
  • 集成amd64库

编辑个人资料

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

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

单独使用配置文件对我来说有点臃肿,需要手动操作.

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

Rya*_*oss 22

没有配置文件,我不知道有什么方法可以做到这一点.这是将配置文件添加到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>
Run Code Online (Sandbox Code Playgroud)

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

要获得有关激活配置文件的更多信息,请访问:http://maven.apache.org/guides/introduction/introduction-to-profiles.html.