跳转至内容

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

下一章下一个菜谱章节

华夏公益教科书