2010-08-17 7 views
8

У меня есть репозиторий Maven для размещения некоторых DLL, но мне нужны мои проекты Maven для загрузки разных dll в зависимости от того, используется ли JVM в x86 или x64.Устранение зависимости Maven по-разному, если JVM используется x86 или x64?

Так, например, на компьютере под управлением x86-версии JVM мне нужно загрузить ABC.dll из хранилища в качестве зависимости, но на другом компьютере с x64-версией JVM мне нужно загрузить XYZ .dll.

Как бы я это сделал? Пример файла pom.xml был бы приятным.

+0

Как вы можете получить доступ к этим dlls из java? – Njax3SmmM2x2a0Zf7Hpd

ответ

5

Вы можете сделать это с помощью профилей. Это будет работать только в JVM Sun.

<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> 
15

Это будет работать на любой виртуальной машине. Вы можете использовать profiles, чтобы иметь альтернативные конфигурации в соответствии с окружающей средой.

Профиль содержит блок активации, который описывает, когда сделать профиль активным, а затем с помощью обычных элементов п, таких как зависимости:

<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 -одно, поэтому вы также можете добавить <family>Windows</family> под тегами <os>.

EDIT: При смешивании 32-битную виртуальную машину на 64-битных ОС, вы можете увидеть, что значение ВМ дает свойству os.arch системы, выполнив Maven цели

mvn help:evaluate

А затем ввести

${os.arch}

в качестве альтернативы, цель help:system перечислены все свойства системы (в произвольном порядке.)

+0

Опасайтесь, этот метод предполагает использование 64-битной JVM в 64-битной системе, которая не всегда верна. Большую часть времени люди используют 32-битную JVM на своей системе 32 бита или нет. –

+1

Это неправда. 32-бит vm вернет x86 для архитектуры даже на x64. (Если это не так, это не сработает, поскольку попытка загрузить 64-разрядную dll под 32-разрядным vm не удастся.) Я запускаю 64-разрядную ОС, но часто использую 32-разрядную vm. См. Мое редактирование для простого способа проверки этого свойства системы с помощью maven. – mdma

+3

amd64 для платформы 64 бит – revo

 Смежные вопросы

  • Нет связанных вопросов^_^