ANT: Как изменить java.library.path в файле сборки - PullRequest
7 голосов
/ 08 января 2009

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

<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.library.path не был изменен, но some.other.property был установлен правильно.

Я хотел бы знать, как изменить файл java.library.path в файле сборки. Задать java.library.path в командной строке ant не так-то просто, так как в это время путь к библиотеке неизвестен.

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

Ответы [ 4 ]

8 голосов
/ 08 января 2009

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

ant -Dsome.other.property = commandlinedefinedpath

вывод больше не будет отображаться

[echo] some.other.property = test1

4 голосов
/ 08 января 2009

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

0 голосов
/ 23 марта 2009

Если вы действительно хотите изменить свойство, вы можете сделать это в задаче 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 "неизменное свойство". Используйте на свой страх и риск.

0 голосов
/ 08 января 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...