2009-01-08 34 views
7

La propiedad java.library.path parece ser de solo lectura. Por ejemplo cuando se ejecuta hormiga en la siguiente BuildFileANT: Cómo modificar java.library.path en un archivo de compilación

<project name="MyProject" default="showprops" basedir="."> 
    <property name="java.library.path" value="test"/> 
    <property name="some.other.property" value="test1"/> 
    <target name="showprops"> 
     <echo>java.library.path=${java.library.path}</echo> 
     <echo>some.other.property=${some.other.property}</echo> 
    </target> 
</project> 

se obtiene

> ant -version 
Apache Ant version 1.6.5 compiled on June 2 2005 

> ant -Djava.library.path=commandlinedefinedpath 
Buildfile: build.xml 
showprops: 
    [echo] java.library.path=commandlinedefinedpath 
    [echo] some.other.property=test1 
BUILD SUCCESSFUL 
Total time: 0 seconds 

La salida indica que el java.library.path no se ha cambiado, pero some.other. la propiedad se configuró correctamente.

Me gustaría saber cómo modificar el java.library.path dentro de un archivo de compilación. Especificar java.library.path en la línea de comando de la hormiga no es realmente una opción fácil, porque la ubicación de la ruta de la biblioteca no se conoce en ese momento.

Nota: Me gustaría que esto funcione para poder especificar la ubicación de las bibliotecas nativas utilizadas en una prueba unitaria.

+0

¿Cómo se calcula java.library.path en primer lugar? – OscarRyz

Respuesta

8

Las propiedades de hormiga no funcionan de la manera esperada: son inmutables, es decir, no puede cambiar el valor de una propiedad después de haberla configurado una vez. Si ejecuta

hormiga -Dsome.other.property = commandlinedefinedpath

la salida ya no mostrar

[echo] some.other.property = test1

0

Creo que esto no es posible, principalmente porque la JVM ya comenzó en el momento en que se modificó este valor.

Sin embargo, puede intentar iniciar un nuevo proceso con las variables env correctas (ver tareas Exec o ANT)

Creo que lo que desea es calcular el valor de la biblioteca en tiempo de ejecución y luego utilizarlo para ejecutar la prueba. Al crear un nuevo proceso, puede tener ese nuevo proceso para usar la ruta correcta.

4

Creo que puedes modificarlo si usas fork = true en tu tarea "java". Puede suministrar java.library.path como una etiqueta sysproperty anidada.

0

Si realmente desea cambiar una propiedad, puede hacerlo en una tarea Java o en un lenguaje de scripting.

Aquí hay un ejemplo usando Groovy:

<?xml version="1.0"?> 
<project name="example" default="run"> 
<taskdef name="groovy" 
      classname="org.codehaus.groovy.ant.Groovy" 
      classpath="lib/groovy-all-1.1-rc-1.jar"/> 


<target name="run"> 
    <echo>java.library.path = ${java.library.path}</echo> 
    <groovy> 
    properties["java.library.path"] = "changed" 
    </groovy> 
    <echo>java.library.path = ${java.library.path}</echo> 
    </target> 
</project> 

precaución, esto viola la propiedad "propiedad inmutable" de hormiga. Úselo bajo su propio riesgo.

Cuestiones relacionadas