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

java.library.path属性似乎是只读的。 例如,当您在以下构建文件上运行ant时

    java.library.path=${java.library.path} some.other.property=${some.other.property}   

你得到

 > 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实际上并不是一个简单的选项,因为当时不知道库路径位置。

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

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

ant -Dsome.other.property = commandlinedefinedpath

输出将不再显示

[echo] some.other.property = test1

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

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

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

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

如果您确实想要更改属性,可以在Java任务或脚本语言中执行此操作。

以下是使用Groovy的示例:

     java.library.path = ${java.library.path}  properties["java.library.path"] = "changed"  java.library.path = ${java.library.path}   

注意,这违反了Ant的“不可变属性”属性。 使用风险由您自己承担。