ANT: как изменить java.библиотека.путь в buildfile

java.библиотека.свойство path отображается только для чтения. Например, при запуске ant на следующем buildfile

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

вы получаете

> 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

вывод указывает, что java.библиотека.путь не было изменено, но некоторые.другой.собственность был установлен правильно.

Я хотел бы знать, как изменить java.библиотека.путь в buildfile. Указание java.библиотека.путь в командной строке ant не очень простой вариант, потому что местоположение пути к библиотеке не известно в то время.

примечание: Я хотел бы, чтобы это работало, чтобы я мог указать местоположение собственных библиотек, используемых в модульном тесте.

4 ответов


свойства Ant работают не так, как вы ожидаете: они неизменяемы, т. е. вы не можете изменить значение свойства после того, как вы установили его один раз. Если вы бежите

ant-Dsome.другой.свойство=commandlinedefinedpath

выход больше не будет показывать

[Эхо] некоторые.другой.собственность=тест1


Я думаю, вы можете изменить его, если вы используете fork=true в своей задаче "java". Вы можете поставить java.библиотека.путь как вложенный тег sysproperty.


Я думаю, что это невозможно, главным образом потому, что JVM уже запущен к моменту изменения этого значения.

однако вы можете попытаться запустить новый процесс с правильными переменными env (см. exec или ant tasks )

Я думаю, что вы хотите, чтобы вычислить значение библиотеки во время выполнения, а затем использовать его для выполнения теста. Создавая новый процесс, вы можете иметь этот новый процесс, чтобы использовать правильный путь.


Если вы действительно хотите изменить свойство, вы можете сделать это в задаче Java или на языке сценариев.

вот пример использования 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>

внимание, это нарушает свойство "неизменяемое свойство" Ant. Используйте на свой страх и риск.