Java 如果使用的JVM是x86或x64,则以不同方式解决Maven依赖关系?

Java 如果使用的JVM是x86或x64,则以不同方式解决Maven依赖关系?,java,maven-2,jvm,dependencies,pom.xml,Java,Maven 2,Jvm,Dependencies,Pom.xml,我已经设置了一个Maven存储库来托管一些DLL,但是我需要我的Maven项目下载不同的DLL,这取决于使用的JVM是x86还是x64 例如,在运行x86版本JVM的计算机上,我需要从存储库下载ABC.dll作为依赖项,但在另一台运行x64版本JVM的计算机上,我需要它下载XYZ.dll 我该怎么做呢?一个示例pom.xml文件就很好了。您可以通过配置文件来实现这一点。这只适用于Sun的JVM <profiles> <profile> <id

我已经设置了一个Maven存储库来托管一些DLL,但是我需要我的Maven项目下载不同的DLL,这取决于使用的JVM是x86还是x64

例如,在运行x86版本JVM的计算机上,我需要从存储库下载ABC.dll作为依赖项,但在另一台运行x64版本JVM的计算机上,我需要它下载XYZ.dll


我该怎么做呢?一个示例pom.xml文件就很好了。

您可以通过配置文件来实现这一点。这只适用于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>

32位
sun.arch.data.model
32
...
64位
sun.arch.data.model
64
...

可能会对您有所帮助。

这将适用于任何虚拟机。您可以根据环境使用其他配置

概要文件包含一个激活块,该激活块描述何时激活概要文件,后跟常用的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>

x86
x64
正如您提到的DLL,我假设这只是Windows,因此您可能还希望在
标记下添加
Windows

编辑:当在64位操作系统上混合32位虚拟机时,您可以通过运行maven目标来查看虚拟机给
OS.arch
系统属性带来的价值

mvn帮助:评估

然后进入

${os.arch}


或者,目标
help:system
列出所有系统属性(没有特定顺序)。

注意,此方法假设您在64位系统上使用64位JVM,但这并不总是正确的。大多数情况下,人们在他们的系统上使用32位JVM,不管是不是32位。这不是真的。即使在x64上,32位虚拟机也会返回架构的x86。(如果没有,那么它将失败,因为尝试在32位虚拟机下加载64位dll将失败。)我运行64位操作系统,但通常使用32位虚拟机。请参阅我的编辑,了解使用64位平台的maven.amd64检查此系统属性的简便方法。如何从java访问这些DLL?