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

7

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不是一个容易的选择,因为库路径位置在那个时候是未知的。
注意:我希望这个工作能够指定单元测试中使用的本地库的位置。

你如何首先计算java.library.path? - OscarRyz
4个回答

8

Ant属性不像你期望的那样工作:它们是不可变的,即在设置一次属性值后,您无法更改属性的值。如果您运行

ant -Dsome.other.property=commandlinedefinedpath

输出将不再显示

[echo] some.other.property=test1


4

如果在"java"任务中使用fork=true,我认为您可以进行修改。您可以提供嵌套的sysproperty标签来提供java.library.path。


0

我认为这是不可能的,主要是因为 JVM 在修改该值时已经启动。

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

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


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的“不可变属性”属性。使用时自担风险。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接