2010-08-17 7 views
8

J'ai un référentiel Maven configuré pour héberger certaines DLL, mais j'ai besoin de mes projets Maven pour télécharger différentes DLLs selon que la JVM utilisée est x86 ou x64. Par exemple, sur un ordinateur exécutant une version x86 de la JVM, j'ai besoin de télécharger ABC.dll à partir du dépôt en tant que dépendance, mais sur un autre ordinateur exécutant une version x64 de la JVM, j'en ai besoin pour télécharger XYZ .dll à la place.Résolution d'une dépendance Maven différemment si la machine virtuelle Java utilisée est x86 ou x64?

Comment ferais-je cela? Un exemple de fichier pom.xml serait bien.

+0

comment accèderiez-vous à ces DLL à partir de Java? – Njax3SmmM2x2a0Zf7Hpd

Répondre

5

Vous pouvez le faire avec des profils. Cela fonctionnera uniquement dans la JVM de 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

Cela fonctionnera sur n'importe quelle machine virtuelle. Vous pouvez utiliser profiles pour avoir d'autres configurations en fonction de l'environnement.

Un profil contient un bloc d'activation, qui décrit quand faire le profil actif, suivi par les éléments habituels pom, tels que les dépendances:

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

Comme vous l'avez mentionné DLLs, je suppose que c'est Windows -seulement, vous pouvez également vouloir ajouter <family>Windows</family> sous les balises <os>.

EDIT: Lors du mélange de 32 bits VM sur un système d'exploitation 64 bits, vous pouvez voir ce que la valeur de la machine virtuelle donne à la propriété du système os.arch en exécutant l'objectif maven

mvn help:evaluate

Et puis en entrant

${os.arch}

Sinon, l'objectif help:system répertorie toutes les propriétés du système (sans ordre particulier.)

+0

Attention, cette méthode suppose que vous utilisez une machine virtuelle Java 64 bits sur un système 64 bits, ce qui n'est pas toujours vrai. La plupart du temps, les gens utilisent 32bits JVM sur leur système 32bits ou non. –

+1

Ce n'est pas vrai. Un vm 32 bits retournera x86 pour l'architecture même sur x64. (Si ce n'est pas le cas, cela échouera, car essayer de charger une DLL 64 bits sous un vm 32 bits échouera.) Je lance un système d'exploitation 64 bits, mais utilise souvent un vm 32 bits. Voir mon édition pour un moyen facile d'inspecter cette propriété du système en utilisant maven. – mdma

+3

amd64 pour plateforme 64 bits – revo

Questions connexes