如果使用的 JVM 是 x86 或 x64,则以不同方式解决 Maven 依赖项?
Posted
技术标签:
【中文标题】如果使用的 JVM 是 x86 或 x64,则以不同方式解决 Maven 依赖项?【英文标题】:Resolving a Maven dependency differently if the JVM in use is x86 or x64? 【发布时间】:2011-03-30 20:43:14 【问题描述】:我设置了一个 Maven 存储库来托管一些 dll,但我需要我的 Maven 项目下载不同的 dll,具体取决于使用的 JVM 是 x86 还是 x64。
例如,在运行 x86 版本 JVM 的计算机上,我需要从存储库中下载 ABC.dll 作为依赖项,但在另一台运行 x64 版本 JVM 的计算机上,我需要下载 XYZ。 dll 代替。
我该怎么做呢?一个示例 pom.xml 文件会很好。
【问题讨论】:
你将如何从 java 访问这些 dll? 【参考方案1】:这适用于任何虚拟机。您可以使用profiles 根据环境进行备用配置。
配置文件包含一个激活块,它描述何时使配置文件处于活动状态,然后是常用的 pom 元素,例如依赖项:
<profiles>
<profile>
<activation>
<os>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<!-- your 32-bit dependencies here -->
</dependency>
</dependencies>
</profile>
<profile>
<activation>
<os>
<arch>x64</arch>
</os>
</activation>
<dependencies>
<!-- your 64-bit dependencies here -->
</dependencies>
</profile>
</profiles>
正如您提到的 DLL,我假设这仅适用于 Windows,因此您可能还想在 <os>
标记下添加 <family>Windows</family>
。
编辑:在 64 位操作系统上混合 32 位 VM 时,您可以通过运行 maven 目标查看 VM 赋予 os.arch
系统属性的值
mvn help:evaluate
然后进入
$os.arch
或者,目标help:system
列出所有系统属性(没有特定顺序。)
【讨论】:
请注意,此方法假定您在 64 位系统上使用 64 位 JVM,但并非总是如此。大多数时候人们在他们的系统上使用 32 位 JVM 或不使用 32 位。 这不是真的。即使在 x64 上,32 位 vm 也会为架构返回 x86。 (如果没有,那么它会失败,因为尝试在 32 位 vm 下加载 64 位 dll 会失败。)我运行 64 位操作系统,但经常使用 32 位 vm。请参阅我的编辑,了解使用 maven 检查此系统属性的简单方法。 amd64 用于 64 位平台【参考方案2】:您可以使用配置文件执行此操作。这仅适用于 Sun 的 JVM。
<profiles>
<profile>
<id>32bits</id>
<activation>
<property>
<name>sun.arch.data.model</name>
<value>32</value>
</property>
</activation>
<dependencies>
...
</dependencies>
</profile>
<profile>
<id>64bit</id>
<activation>
<property>
<name>sun.arch.data.model</name>
<value>64</value>
</property>
</activation>
<dependencies>
...
</dependencies>
</profile>
</profiles>
【讨论】:
【参考方案3】:Maven Profiles可能对你有帮助。
【讨论】:
以上是关于如果使用的 JVM 是 x86 或 x64,则以不同方式解决 Maven 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道在构建中使用哪个 cpu(x86 x64 或 AnyCpu)?