Apache Ant/属性
外观
Ant 不像大多数标准编程语言那样拥有变量。Ant 拥有一个称为 **属性** 的结构。了解属性的工作原理对于理解 Ant 如何(以及为何)如此有效至关重要。
以下是一个关于如何设置和使用属性的简单演示
<project name="My Project" default="MyTarget">
<!-- set global properties -->
<property name="SrcDir" value="src"/>
<property name="BuildDir" value="build"/>
<target name="MyTarget">
<echo message = "Source directory is = ${SrcDir}"/>
<echo message = "Build directory is ${BuildDir}"/>
</target>
</project>
请注意,要使用属性,您必须在它之前放置一个美元符号和左花括号,在它之后放置一个右花括号。不要将它们与括号混淆。
当您运行此代码时,您应该得到以下结果
Buildfile: C:\AntClass\PropertiesLab\build.xml MyTarget: [echo] Source directory is = src [echo] Build directory is build BUILD SUCCESSFUL Total time: 204 milliseconds
Ant 属性是 **不可变的**,这意味着一旦它们被设置,它们就不能在构建过程中被更改!这在开始时可能看起来有些奇怪,但这是构建目标一旦编写后,它们往往会一致地运行而没有副作用的核心原因之一。这是因为目标只有在必须时才会运行,而您无法预测目标运行的顺序。
属性不必仅在目标内部使用。它们可以在构建文件的任何地方(或外部属性文件)设置,并在设置后在构建文件的任何地方引用。
以下是一个小型 Ant 项目,演示了属性的不可变性
<project name="My Project" default="MyTarget">
<target name="MyTarget">
<property name="MyProperty" value="One"/>
<!-- check to see that the property gets set -->
<echo>MyProperty = ${MyProperty}</echo>
<!-- now try to change it to a new value -->
<property name="MyProperty" value="Two"/>
<echo>MyProperty = ${MyProperty}</echo>
</target>
</project>
当您运行此代码时,您应该得到以下输出
Buildfile: C:\AntClass\PropertiesLab\build.xml MyTarget: [echo] MyProperty = One [echo] MyProperty = One BUILD SUCCESSFUL Total time: 343 milliseconds
请注意,尽管尝试将 MyProperty 更改为 "Two",但 MyProperty 的值 **并没有** 改变。Ant **不会** 警告您此事。
对于新手来说,这可能看起来很奇怪,但这非常适合构建复杂的树形值,这些值一旦设置就可以反复使用。它使您的构建脚本易于维护和可靠。
Ant 还有一套不错的 "内置" 属性,您可以使用它们
这演示了如何读取系统属性
<project name="MyProject" default="Display-Builtins">
<target name="Display-Builtins" description="Display Builtin Properties">
<!-- the absolute path to the location of the buildfile -->
<echo>${basedir}</echo>
<!-- the absolute path of the buildfile -->
<echo>${ant.file}</echo>
<!-- ant.version - the version of Ant that you are running -->
<echo>${ant.version}</echo>
<!-- ant.project.name - the name of the project that is currently executing; it is set in the name attribute of <project>. -->
<echo>${ant.project.name}</echo>
<!-- ant.java.version - the JVM version Ant detected; currently it can hold the values "1.1", "1.2", "1.3", "1.4" and "1.5". -->
<echo>${ant.java.version}</echo>
</target>
</project>
当您运行此程序时,您应该得到类似于以下的输出
Buildfile: C:\eclipse\workspace\Ant Examples\build.xml Display-Builtins: [echo] C:\AntClass\PropertiesLab [echo] C:\AntClass\PropertiesLab\build.xml [echo] Apache Ant version 1.6.2 compiled on July 16, 2004 [echo] MyProject [echo] 1.5 BUILD SUCCESSFUL Total time: 188 milliseconds
有关内置 Ant 和 Java 属性的完整列表,请参阅 Ant 参考手册,或者您可以尝试以下链接以获取 Java 属性:getProperties