1.Ant是什么?
Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other.——apache
Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。——百度百科
我的理解:通过写类似于一个脚本文件(windos下的*.bat,linux下的*.sh,而ant中的build.xml),来执行一系列的动作(targart)。这些动作可能是创建或移动文件、执行javac编译Java源码或执行jar打包、运行一些其它工具(如junit)等。最终形成jar包、war包等,最终可直接用于项目或运行。
2.Ant环境
0)JDK环境已配好
JAVA_HOME、Path。
1)下载
http://ant.apache.org/bindownload.cgi
2)解压,并配置环境
ANT_HOME:D:\Java\apache-ant-1.9.0
PATH:添加 %ANT_HOME%\bin;
测试:ant -version
3.Ant使用
3.1Hello World with Apache Ant
1)创建一个测试项目文件夹E:\ant-test\helloworld\
2)建立一个源文件夹目录:*\helloworld\src
3)建立类 src\oata\HelloWorld.java
package oata; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } }
4)用传统方法测试:
md build\classes javac -sourcepath src -d build\classes src\oata\HelloWorld.java java -cp build\classes oata.HelloWorld
正确结果:
Hello World
创建jar,再运行
echo Main-Class: oata.HelloWorld>myManifest md build\jar jar cfm build\jar\HelloWorld.jar myManifest -C build\classes . java -jar build\jar\HelloWorld.jar
6)通过Ant来完成这个过程
a)创建一个build.xml
<project> <!--删除旧的编辑--> <target name="clean"> <delete dir="build"/> </target> <!—编译 放到build/classes中--> <target name="compile"> <mkdir dir="build/classes"/> <javac srcdir="src" destdir="build/classes"/> </target> <!--通过jar命令 打包为jar--> <target name="jar"> <mkdir dir="build/jar"/> <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes"> <manifest> <attribute name="Main-Class" value="oata.HelloWorld"/> </manifest> </jar> </target> <!--通过java命令 运行它--> <target name="run"> <java jar="build/jar/HelloWorld.jar" fork="true"/> </target> </project>
b)通过ant命令来运行
(ant clean 可选) ant compile ant jar ant run
或者:
ant clean compile jar run
c)对比两种方式
7)增强Ant功能
a)修改build.xml
<!--指定工程名,工程目录,默认运行的target为 main-->
<project name="HelloWorld" basedir="." default="main"> <!--定义属性,或以共用,<name,value>形式--> <property name="src.dir" value="src"/> <property name="build.dir" value="build"/> <property name="classes.dir" value="${build.dir}/classes"/> <property name="jar.dir" value="${build.dir}/jar"/> <property name="main-class" value="oata.HelloWorld"/> <target name="clean"> <delete dir="${build.dir}"/> </target> <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}"/> </target> <!--运行之前,先运行compile--> <target name="jar" depends="compile"> <mkdir dir="${jar.dir}"/> <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}"> <manifest> <attribute name="Main-Class" value="${main-class}"/> </manifest> </jar> </target> <!--运行之前,先运行jar--> <target name="run" depends="jar"> <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/> </target> <target name="clean-build" depends="clean,jar"/> <!--运行之前,先运行clean,run--> <target name="main" depends="clean,run"/> </project>
b)只要运行 ant
8)使用外部的jar
a)例如,使用Log4j,将log4j-1.2.14.jar放到工程目录\lib\下
package oata; import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; public class HelloWorld { static Logger logger = Logger.getLogger(HelloWorld.class); public static void main(String[] args) { BasicConfigurator.configure(); logger.info("Hello World"); // the old SysO-statement } }
b)在build中添加jar(即添加类路径)
<project name="HelloWorld" basedir="." default="main"> ... ... <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" /> </target> <target name="run" depends="jar"> <java fork="true" "> </java> </target> ... </project>
c)运行
9)加载外部文件
a)在src目录下创建log4j.properties文件
log4j.rootLogger=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-5p%d{yyyy-MM-dd(HH:mm:ss)} [%L]-[%c] - %m%n-[%F]
b)修改build.xml,编译完成后,将properties拷到classes目录下
... <target name="compile"> <mkdir dir="${classes.dir}"/> <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/> <copy todir="${classes.dir}"> <fileset dir="${src.dir}" excludes="**/*.java"/> </copy> </target> ...
c)执行ant
10)使用Junit(Ant has a built-in JUnit 3.8.2)
a)建立src/HelloWorldTest.java
public class HelloWorldTest extends junit.framework.TestCase { public void testNothing() { } public void testWillAlwaysFail() { fail("An error message"); } }
b)执行ant
如果出现“错误: 程序包junit.framework不存在”
在http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22下载junit-3.8.2.jar,并放到工程的lib目录中。
c)产生测试报告,配置build.xml
... <property name="report.dir" value="${build.dir}/junitreport"/> ... <target name="junit" depends="jar"> <mkdir dir="${report.dir}"/> <junit printsummary="yes"> <classpath> <path refid="classpath"/> <path refid="application"/> </classpath> <formatter type="xml"/> <batchtest fork="yes" todir="${report.dir}"> <fileset dir="${src.dir}" includes="*Test.java"/> </batchtest> </junit> </target> <target name="junitreport"> <junitreport todir="${report.dir}"> <fileset dir="${report.dir}" includes="TEST-*.xml"/> <report todir="${report.dir}"/> </junitreport> </target>
运行 ant junit,将在 build/junitreport/中生成一个xml文件:TEST-HelloWorldTest.xml
运行ant junitreport,会生成 html形式的报告