Apache Ant简介
简单的讲,Ant是一个命令行工具,可以用来编译java文件,执行java程序,生成jar文件,执行测试等。
1.Ant的配置
(1)下载Ant
http://ant.apache.org/bindownload.cgi
下载解压后放在某路径下,例如:C:\apache-ant-1.8.2
(2)配置环境变量
追加系统环境变量:“ANT_HOME”,值:“C:\apache-ant-1.8.2”
在系统环境变量“Path”里追加“C:\apache-ant-1.8.2\bin”
(3)验证配置是否正确
在命令行输入“ant -version”
如果显示“Apache Ant(TM) version 1.8.2 compiled on December 20 2010”,说明正确
2.创建build.xml文件
用XML编写,至少包含一个project和一个target.
以下面这个build.xml为例说明
主要任务:
(1)正式source文件(src目录下)和Junit测试(test目录下)文件可以分别编译。
(2)生成jar文件,并且不包含测试文件。
(3)通过ant执行Junit测试,生成测试报告。
编写思路:
(1)根据上述任务,至少需要编写4个target
target1:compile,编译正式source文件
target2:testcomplile,编译test文件
target3:make-jar,生成jar文件
target4:runtests,执行junit测试
(2)辅助target
target5:JUNIT,执行Junit测试需要此target支持
target6:apidocs,生成javaDoc
target7:rmi-compile,编译RMI相关文件(工程中涉及到了RMI通信内容)。
特别说明:test目录下的测试文件与src的source文件是一一对应的,包结构完全一致。
主要目录结构
myproject
├─bin
├─config
├─image
├─lib
├─log
├─src
│ └─AAA
│ └─BBB
│ └─CCC
└─test
└─AAA
└─BBB
└─CCC
----------------------------------------file start-------------------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<!-- project tag
name :工程名字
default:默认执行的target
basedir:ant执行的根目录-->
<project name="myproject" default="runtests" basedir=".">
<!-- source路径 -->
<property name="src.dir" value="src" />
<!-- 编译后class路径 -->
<property name="build.dir" value="classes" />
<!-- JavaDoc路径 -->
<property name="build.apidocs" value="${build.dir}/doc" />
<!-- 测试source路径
test.dir : JUnit执行路径
-->
<property name="testSrc.dir" value="test" />
<!-- test报告路径 -->
<property name="reports.dir" value="./doc/report" />
<!-- test结果统计路径 -->
<property name="correctreports.dir" value="${reports.dir}/html" />
<!-- target tag
name :target名字
depends :依赖target,先执行被依赖的target.
description:target描述
-->
<target name="JUNIT">
<available property="junit.present" classname="junit.framework.TestCase" />
</target>
<target name="compile" depends="JUNIT">
<mkdir dir="${build.dir}"/>
<depend srcdir="${src.dir}" destdir="${build.classes}"/>
<javac srcdir="${src.dir}" destdir="${build.classes}">
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>
<include name="**/*.java"/>
</javac>
</target>
<target name="testcompile" depends="compile">
<depend srcdir="${testSrc.dir}" destdir="${build.classes}"/>
<!-- test class文件与正式class文件,输出到同一目录下
也就是说正式source和测试source的原文件(java文件)不同目录,但编译后的class文件同目录。
-->
<javac srcdir="${testSrc.dir}" destdir="${build.classes}" fork="true" memoryMaximumSize="512m">
<compilerarg value="-Xlint:unchecked"/>
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</classpath>
<include name="**/*.java"/>
</javac>
</target>
<target name="rmi-compile" depends="compile">
<rmic base="${build.classes}" verify="true">
<classpath>
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>
<include name="**/*.class"/>
<exclude name="**/test/*.class"/>
</rmic>
</target>
<target name="runtests" depends="testcompile">
<delete>
<fileset dir="${reports.dir}" includes="**/*" />
</delete>
<mkdir dir="${reports.dir}"/>
<junit printsummary="on" failureProperty="fail">
<classpath>
<pathelement location="lib/***.jar" />
<pathelement location="lib/***.jar" />
<pathelement path="${build.classes}"/>
<pathelement path="${java.class.path}/"/>
</classpath>
<formatter type="xml"/>
<batchtest fork="yes" todir="${reports.dir}">
<fileset dir="${src.dir}">
<!-- 只执行test CLASS -->
<include name="${test.dir}**/*Test.java" />
</fileset>
</batchtest>
</junit>
<junitreport todir="${reports.dir}">
<fileset dir="${reports.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${correctreports.dir}"/>
</junitreport>
</target>
<!-- JavaDoc生成 -->
<target name="apidocs" depends="compile" description="JavaDoc生成">
<javadoc sourcepath="${src.dir}" destdir="${build.apidocs}"
packagenames="AAA.BBB.CCC.*"
author="true"
version="true"
notree="true"
nonavbar="true"
noindex="true"
windowtitle="MyProject API"
doctitle="Regulation"
public="true"
/>
</target>
<!-- Jar生成 -->
<target name="make-jar" depends="rmi-compile" description="Jar生成">
<delete file="myproject.jar"/>
<jar jarfile="myproject.jar" manifest="MANIFEST.MF">
<fileset dir="classes">
<!--除去test文件-->
<exclude name="**/test/"/>
</fileset>
</jar>
</target>
</project>
--------------------------------------file end----------------------------------------------
3.执行build.xml
将build.xml放到myproject工程的根目录下。
控制台切换到myproject工程的根目录“C:\myproject”:
(1)编译正式source
C:\myproject>ant compile
(2)编译测试文件
C:\myproject>ant testcompile
(3)生成jar文件,并且不包含测试文件。
C:\myproject>ant make-jar
(4)通过ant执行Junit测试,生成测试报告。
C:\myproject>ant runtest