2010-08-17 9 views
8

Mam repozytorium Maven skonfigurowane do obsługi niektórych bibliotek dll, ale potrzebuję moich projektów Maven do pobrania różnych bibliotek dll w zależności od tego, czy używana maszyna JVM to x86 czy x64.Rozwiązywanie zależności Maven inaczej, jeśli JVM w użyciu jest x86 lub x64?

Na przykład na komputerze z wersją JVM w wersji x86 potrzebuję pobrać ABC.dll z repozytorium jako zależność, ale na innym komputerze z wersją JVM x64, potrzebuję pobrać XYZ .dll zamiast tego.

Jak miałbym to zrobić? Przykładowy plik pom.xml byłby niezły.

+0

Jak uzyskać dostęp do bibliotek dll z java? – Njax3SmmM2x2a0Zf7Hpd

Odpowiedz

5

Możesz to zrobić z profilami. Będzie to działać tylko w JVM firmy 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

Będzie to działać na dowolnej maszynie wirtualnej. Możesz użyć profiles, aby mieć alternatywne konfiguracje w zależności od środowiska.

Profil zawiera blok aktywacyjny, który opisuje, kiedy udostępni profil aktywny, a następnie zwykłych elementów POM, takich jak zależności:

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

Jak wspomniano DLL, jestem przy założeniu, to jest Windows - tylko dlatego możesz również dodać <family>Windows</family> pod tagami <os>.

EDIT: Po zmieszaniu 32-bitową maszynę wirtualną na 64-bitowego systemu operacyjnego, można zobaczyć, co wartość VM daje do właściwości systemu os.arch uruchamiając cel maven

mvn help:evaluate

a następnie wprowadzając

${os.arch}

Alternatywnie, celem help:system lista wszystkich właściwości systemu (w przypadkowej kolejności).

+0

Uwaga: ta metoda zakłada, że ​​używasz 64-bitowej maszyny JVM w systemie 64-bitowym, która nie zawsze jest prawdziwa. W większości przypadków ludzie używają 32-bitowej maszyny JVM na swoim 32-bitowym systemie lub nie. –

+1

To nie prawda. 32-bitowy vm zwróci x86 dla architektury nawet na x64. (Jeśli tak się nie stanie, to się nie uda, ponieważ próba załadowania 64-bitowego pliku dll w 32-bitowym pliku vm zakończy się niepowodzeniem.) Uruchomiłem 64-bitowy system operacyjny, ale często używam 32-bitowego vm. Zobacz moją edycję, aby w łatwy sposób sprawdzić właściwość tego systemu za pomocą programu maven. – mdma

+3

amd64 dla platformy 64-bitowej – revo

Powiązane problemy