【问题标题】:Resolving a Maven dependency differently if the JVM in use is x86 or x64?如果使用的 JVM 是 x86 或 x64,则以不同方式解决 Maven 依赖项?
【发布时间】: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?

标签: java maven-2 jvm dependencies pom.xml


【解决方案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可能对你有帮助。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2018-03-27
      • 2013-11-17
      • 2012-01-12
      • 2016-03-27
      • 1970-01-01
      • 2011-04-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多