2011-10-21 18 views
5

Tengo una biblioteca externa que debe vincularse dinámicamente con una prueba en mi proyecto de Java. El proyecto se configura utilizando Maven, y tengo que añadir lo siguiente a mis argumentos de VM en Eclipse para la prueba de pasar:¿Es posible pasar constantemente -Djava.library.path a una prueba maven desde dentro de un archivo POM?

-Djava.library.path=${env_var:HOME}/.m2/repository/natives/dist/lib -ea

Desafortunadamente esto significa que la ejecución de la prueba desde experta usando: mvn test siempre fallará .

Una solución es llamar mvn con un argumento -DargLine así:

mvn test -DargLine="-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea"

Sin embargo, claramente esto tiene el problema de ser específica a mi máquina, por lo que no se puede poner directamente en el archivo pom. Creo que lo que estoy buscando es una forma de modificar esa cadena por máquina, como hace la primera línea para eclipse.

También tengo curiosidad de cómo podría ponerlo en el archivo POM, he tratado de colocarlo en el interior de <argLine> etiquetas, pero eso no parece funcionar, ¿hay algo que me falta:

<argLine>-Djava.library.path=/Users/rob/.m2/repository/natives/dist/lib -ea</argLine>

Respuesta

3

Después de algunas investigaciones, he descubierto una solución decente para mi problema.

En maven su archivo settings.xml, se puede definir una ubicación para el localRepository aquí son los valores por defecto si se establece nada:

  • Unix/Mac OS X - ~/.m2
  • de Windows - C: \ Documents and Settings \ username.m2

Como se puede ver esto coincide con al menos la primera parte del directorio que estaba tratando de establecer: /Users/rob/.m2

Como la vinculación dinámica es específica del sistema operativo, es posible que también desee configurar un perfil para los sufijos de ruta alternativos. Usted puede hacer esto en un .pom así:

<profile> 
    <id>OSX</id> 
     <activation> 
      <os> 
       <family>mac</family> 
      </os> 
     </activation> 
    <properties> 
     <dynamic.libLoc>${settings.localRepository}/natives/dist/lib</dynamic.libLoc> 
    </properties> 
</profile> 

continuación, puede utilizar esta propiedad en el .pom para el proyecto que desea probar. En la categoría de plugins puede agregar:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <argLine>-Djava.library.path=${dynamic.libLoc}</argLine> 
    </configuration> 
</plugin> 

Ahora experto puede ejecutar esas pruebas sin que los usuarios tengan que especificar la ubicación de las bibliotecas de enlace dinámico. También puede manejar usuarios con diferentes sistemas operativos simplemente agregando otro perfil.

Nota: Con respecto a mi problema con <argLine> anterior. Creo que solo lo estaba usando en el incorrecto .pom

Cuestiones relacionadas