ANT:如何修改构建文件中的java.library.path

时间:2009-01-08 01:05:41

标签: java ant

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。在ant命令行上指定java.library.path实际上不是一个简单的选项,因为当时不知道库路径位置。

注意:我希望这可以工作,以便我可以指定单元测试中使用的本机库的位置。

4 个答案:

答案 0 :(得分:8)

Ant属性不能按预期方式工作:它们是不可变的,即您在设置一次后无法更改属性的值。如果你运行

  

ant -Dsome.other.property = commandlinedefinedpath

输出将不再显示

  

[echo] some.other.property = test1

答案 1 :(得分:4)

如果你在“java”任务中使用fork = true,我认为你可以修改它。您可以将java.library.path作为嵌套的sysproperty标记提供。

答案 2 :(得分:0)

我认为这是不可能的,主要是因为JVM在修改此值时已经开始了。

但是,您可以尝试使用正确的env变量启动新进程(请参阅exec或ant任务)

我认为你想要的是在运行时计算库的值,然后用它来运行测试。通过创建新流程,您可以使用新流程来使用正确的路径。

答案 3 :(得分:0)

如果您确实想要更改属性,可以使用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的“不可变属性”属性。使用风险自负。