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

如何在Maven中使用平台架构来确定依赖关系?,maven,cross-platform,Maven,Cross Platform,正如问题所述,在构建maven构件时,是否有一种很好的方法可以使用基于平台体系结构的依赖关系。我知道个人资料以及如何使用它们。为了这个特殊的目的,我不想将它们合并到我的构建中 具体问题可描述如下: 多模块maven项目 持续集成,项目人员使用均匀分布的平台架构 对本机系统库的依赖关系 我不想在设置中使用的解决方案: 无依赖冗余 无maven配置文件(或至少由平台架构自动选择的maven配置文件) 例如: 人1 (使用linux i686)构建项目 x86库被捆绑到每个子项目中,生成的人

正如问题所述,在构建maven构件时,是否有一种很好的方法可以使用基于平台体系结构的依赖关系。我知道个人资料以及如何使用它们。为了这个特殊的目的,我不想将它们合并到我的构建中

具体问题可描述如下:

  • 多模块maven项目
  • 持续集成,项目人员使用均匀分布的平台架构
  • 对本机系统库的依赖关系
我不想在设置中使用的解决方案:

  • 无依赖冗余
  • 无maven配置文件(或至少由平台架构自动选择的maven配置文件)
例如:

人1

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

  • (使用win32)生成项目
  • 32位库的绑定如上所述
持续集成

  • 与linux amd64上的生产环境一样运行
  • 集成amd64库
编辑个人资料

我知道配置文件是实现这一点的一种解决方案。但我想实现的是,您可以从一些随机源代码版本控制中签出您的项目,并使用本机库构建一个项目,而无需执行任何操作(只要平台满足所配置库的要求)

我不想配置这些配置文件设置,也不想明确地运行特定的目标。如果在概要文件中存在这样的情况,我希望看到一个自动确定平台体系结构并运行目标的示例。如果有一个没有概要文件,我会更喜欢它,因为它不那么复杂,同时有不同的概要文件组合(包括测试和其他用例)

拥有个人资料对我来说有点臃肿,需要手动操作


我希望有人能给我一个简洁的建议,因为我不知怎的被困在这个问题上了。

使用个人资料有什么问题?它们正是为这种情况而制造的。您可以按操作系统/平台指定配置文件操作并添加依赖项。完全透明


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

没有配置文件,我不知道有什么方法可以做到这一点。这是将概要文件添加到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>


.

Im使用当前配置文件对测试集进行分组。如果我发明了一个不同的逻辑子集组,我需要配置它们的每个组合,因此我不想这样。corelib是一种手动方式,我想知道如何自动完成。我想你误解了配置文件。您可以拥有您的测试集配置文件,然后拥有另一组更改依赖关系的配置文件。配置文件上的
组决定何时使用,多个配置文件可以同时激活。我支持Ryan的回答。但要小心,太多的配置文件会使构建变得不可预测和不可管理。你应该考虑测试模块而不是测试配置文件。我知道多个配置文件,也知道同时激活多个配置文件,但这不会改变各种组合带来的复杂性。不幸的是,它并没有解决我的自动化问题。我编辑我的帖子是为了让它更清楚。我很难接受这个想法:Maven已经决定了你怎么做。配置文件就是这样做的。因此,必须使用配置文件来执行此操作。Maven不灵活——它受到约束。这就是它的优势。
linux64
在我的情况下不起作用(64位Linux 3.16.0上的8u25)<代码>Linuxamd64
未执行。不知道如何更一般地匹配。在Red Hat上可能是
x86\u 64