在这一类文件中,你可以看到一个静态域和方法。第一个静态域名为RELEASE,其具有一个“@RELEASE@”的值。这也就是我们等下使用Ant复制过滤器取代的符号。然而现在,我们只需要将其置为“@RELEASE@”。
两个静态方法中的第一个为getVersionString(),只是简单地连接了一些其他静态域的值,然后有选择性地添加RELEASE值,除非其值为字符串@RELEASE@。这种情况不需要添加RELEASE值,因为它包含很多无用的build识别信息。如果RELEASE在源文件编译之前已经被更改,这一值就会被添加到返回的版本字符中。
请注意到,我们所使用与RELEASE值相比较的常量字符被分成两个字符串,这两个字符串在编译时被连接,这就防止Ant符号替代过滤器替代@RELEASE@常量。
Build文件
现在,我们将注意力转移到Build.xml文件(Listing B)。
表B
<project name="myapp" default="jar">
<!-- where the project source code is found -->
<property name="sources" value="src"/>
<!-- where compiled class files should be left -->
<property name="classes" value="classes"/>
<target name="jar" depends="pre-jar,classes"
description="build release jar">
<jar destfile="jar/${ant.project.name}.jar">
<fileset dir="classes">
<include name="**/*.class"/>
</fileset>
</jar>
</target>
<target name="pre-jar" depends="ensure-release">
<property name="srcdir" value="jar/src"/>
<mkdir dir="${srcdir}"/>
<copy todir="${srcdir}">
<fileset dir="${sources}">
<include name="**/*.java"/>
</fileset>
<filterset>
<filter token="RELEASE" value="${release}"/>
</filterset>
</copy>
</target>
<target name="ensure-release" unless="release">
<fail message="You must define -Drelease=<name>"/>
</target>
<target name="classes" description="compile classes">
<property name="srcdir" value="${sources}"/>
<mkdir dir="${classes}"/>
<echo message="srcdir=${srcdir}"/>
<javacdestdir="${classes}" srcdir="${srcdir}">
</javac>
</target>
<target name="clean" depends="tidy" description="delete all generated files">
<delete dir="jar" quiet="true"/>
</target>
<target name="tidy" description="delete all intermediary files">
<delete dir="jar/src" quiet="true"/>
<delete dir="classes" quiet="true"/>
</target>
</project>
