现在我们已经了解如何定义属性、依赖关系以及如何运行ant,接下来我们将学习怎样使用ant编译java源代码并生成jar文件。
编译源代码
由于Ant的主要目标就是生成java应用程序,它内置了javac任务来调用java的编译器。此任务一般定义如下
<javac srcdir=”src” destdir=“build”/>
Ant会寻找src目录下所有以.java为扩展名的所有文件,并对他们调用javac编译器,从而在build目录下生成class文件。Javac任务不仅会编译需要编译的源文件,如果某个类文件已经存在,但是对应的源代码文件自从该类文件生成后没有改过,则不会重新编译此源代码文件。
创建jar文件
在编译java源文件之后,通常会将其归档打包为一个jar文件。Jar任务通常如下定义
<jar destfile=”wufengtinghai.alm.jar” basedir=”build”/>
此任务将创建一个wufengtinghai.alm.jar文件,并将build下的所有文件打包到此jar文件中。如果没有指定清单文件,Ant则会生成一个基本的清单文件。Manifest属性允许制定一个清单文件,同时也可以使用manifest任务定义清单文件。
<jar destfile="wufengtinghai.alm.jar" basedir="classes"> <manifest> <attribute name="Built-By" value="${user.name}"/> <attribute name="project" value="wufengtinghai.alm"/> </manifest> </jar>
生成时间戳
在生成环境中使用当前时间和日期,可以以此种方式标记某个生成何时生成输出的。Ant提供了简单易用的tstamp任务可以完成这个功能。这个任务通常在生成过程开始时调用。Tstamp不产生任何的输出;相反,它会根据当前系统时间和日期设置Ant的相关属性。
DSTAMP:设置为当前日期,默认格式为yyymmdd,例如20150606
TSTAMP:设置为当前时间,默认格式为hhmm,例如1020
TODAY:设置为当前日期,带完整的月份,例如2015年6月6日
那我们可以将我们的jar文件定义为如下
<jar destfile="lucene-${DSTAMP}.jar" basedir="classes"/>
最终我们的生成文件autobuildjava.xml如下
<?xml version="1.0"?> <project default="dist" name="autobuildjava" basedir="../"> <description>A simple auto build Java project</description> <property name="srcDir" location="src" /> <property name="buildDir" location="build" /> <property name="distDir" location="dist" /> <target name="init"> <tstamp /> <mkdir dir="${buildDir}" /> <mkdir dir="${distDir}" /> </target> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${buildDir}" /> </target> <target name="dist" depends="compile"> <jar destfile="${distDir}/wufengtinghai.alm-${DSTAMP}.jar" basedir="${buildDir}"> <manifest> <attribute name="Built-By" value="${user.name}" /> <attribute name="project" value="wufengtinghai.alm" /> </manifest> </jar> </target> <target name="clean"> <delete dir="${buildDir}" /> <delete dir="${distDir}" /> </target> </project>
执行生成控制台输出如下
生成的jar文件和清单文件如下