我在Linux中的不同项目的构建文件中经常使用“out.absolute.dir”,我真的好奇它究竟是什么意思。所以我写了一个简短的构建文件,我在下面的行中提到了< / p>
<project name="Test_Ant_APK" default="print">
<property name="cal.out.dir" location="${out.absolute.dir}"/>
<target name="print">
<echo>p=${cal.out.dir}</echo>
</target>
</project>
当我从命令行运行这个构建文件时,我得到了这个输出
构建文件:/home/jody/workspace/Test_Ant_APK/build.xml
打印:
[echo] p=/home/jody/workspace/Test_Ant_APK/${out.absolute.dir}
建立成功
总时间:0秒
我对输出很困惑。我认为我们应该将p = / home / jody / workspace / Test_Ant_APK作为输出。为什么我们有$ {out.absolute.dir} 在输出结束?这是什么意思?这个构建文件有问题吗?
答案 0 :(得分:2)
您的buildcript没有错。
您使用语法${...}
来处理属性值,但是作为
属性out.absolute.dir
未设置在您的ant文件的项目范围内,它会被回显为is =&gt; ${out.absolute.dir}
这对于未设置的属性是正常的 - 在您的情况下,由于在属性任务中使用了location属性,因此将其添加到您的ant脚本所在的目录中。
使用带有value属性的属性任务时,请查看差异:
<project name="foo">
<property name="cal.out.dir" value="${out.absolute.dir}"/>
<target name="print">
<echo>${cal.out.dir}</echo>
</target>
</project>
输出:
[echo] ${out.absolute.dir}
我认为属性名$[out.absolute.dir}
可能会被用于多个脚本中,因为属性位置的属性任务意味着(取自ant手册):
将属性设置为给定文件的绝对文件名。如果 该属性的值是绝对路径,保持不变 (将/和\字符转换为当前平台 约定)。否则它被视为相对于的路径 项目的基础和扩展。
有关详细信息,请参阅ant manual property task
如果要回显项目名称属性的值,则必须使用内置属性${ant.project.name}
,f.e:
<project name="foo">
<echo>$${ant.project.name} => ${ant.project.name}</echo>
</project>
查看所有内置属性:
<project>
<echo>ant builtin properties:</echo>
<echoproperties prefix="ant"/>
<echo>java builtin properties:</echo>
<echoproperties prefix="java"/>
</project>