如果使用的 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,因此您可能还想在 &lt;os&gt; 标记下添加 &lt;family&gt;Windows&lt;/family&gt;

编辑:在 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 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

DllImport 自动选择x64或x86 dll

选择哪个 VC++ 可再发行包(x86 或 x64)?

如何知道在构建中使用哪个 cpu(x86 x64 或 AnyCpu)?

编译为 x86 时检测 OS x86 或 x64

如何使用 CMAKE 从命令行在 Windows 上构建 x86 和/或 x64?

『开源重编译』System.Data.SQLite.dll 自适应 x86 x64 AnyCPU 重编译