2010-08-17 5 views
8

Tengo un repositorio Maven configurado para alojar algunos dlls, pero necesito que mis proyectos Maven descarguen diferentes dlls dependiendo de si la JVM en uso es x86 o x64.¿Resolver una dependencia de Maven de forma diferente si la JVM en uso es x86 o x64?

Así, por ejemplo, en una computadora que ejecuta una versión x86 de la JVM necesito que descargue ABC.dll del repositorio como una dependencia, pero en otra computadora que ejecute una versión x64 de la JVM, lo necesito para descargar XYZ .dll en su lugar.

¿Cómo voy a hacer esto? Un ejemplo de archivo pom.xml estaría bien.

+0

¿cómo accedería a estos dlls desde java? – Njax3SmmM2x2a0Zf7Hpd

Respuesta

5

Puede hacerlo con perfiles. Esto solo funcionará en 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

Esto funcionará en cualquier máquina virtual. Puede usar profiles para tener configuraciones alternativas de acuerdo con el entorno.

Un perfil contiene un bloque de activación, que describe cuándo hacer el perfil activo, seguido por los elementos del pom habituales, como las dependencias:

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

Como usted ha mencionado DLL, estoy suponiendo que esto es Windows -solo, por lo que es posible que también desee agregar <family>Windows</family> bajo las etiquetas <os>.

EDIT: Al mezclar 32 bits máquina virtual en un sistema operativo de 64 bits, se puede ver cuál es el valor de la máquina virtual está dando a la propiedad os.arch sistema ejecutando el objetivo experta

mvn help:evaluate

Y luego entrar

${os.arch}

Alternativamente, el objetivo help:system listas de todas las propiedades del sistema (en ningún orden en particular.)

+0

Tenga cuidado, este método supone que utiliza una JVM de 64 bits en un sistema de 64 bits que no siempre es cierto. La mayoría de las veces las personas usan 32bits JVM en sus sistema de 32 bits o no. –

+1

Eso no es verdad. Una vm de 32 bits devolverá x86 para la arquitectura incluso en x64. (De lo contrario, fallaría, ya que al intentar cargar un dll de 64 bits en una vm de 32 bits fallará). Ejecuto un sistema operativo de 64 bits, pero a menudo uso una vm de 32 bits. Vea mi edición para una manera fácil de inspeccionar la propiedad de este sistema usando maven. – mdma

+3

amd64 para plataforma de 64 bits – revo

Cuestiones relacionadas