【问题标题】:ANT: How to modify java.library.path in a buildfileANT:如何在构建文件中修改 java.library.path
【发布时间】:2009-01-08 01:05:41
【问题描述】:

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?

标签: java ant


【解决方案1】:

Ant 属性不会按您期望的方式工作:它们是不可变的,也就是说,一旦设置了属性值,您就无法更改它。如果你跑

ant -Dsome.other.property=commandlinedefinedpath

输出将不再显示

[echo] some.other.property=test1

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-30
          • 1970-01-01
          • 2020-04-08
          • 2013-04-15
          • 2015-10-08
          • 2014-11-20
          • 1970-01-01
          相关资源
          最近更新 更多