Ant使用
详细可参考:http://ant.apache.org/manual/Tasks/
http://ant.apache.org/manual/index.html
说明:xml很多的元素的写法均可用属性或是子元素来实现
Ant
Ant 是一个构件工具,可以实现项目的自动构件和部署,其构件文件(一般默认是build.xml,也可以用命令进行指定其他的xml文件)是基于XML编写的。
其常用基本功能有:新建文件夹,移动文件夹,删除文件夹,复制文件夹,主要是用于进行Java项目的部署,对Java项目进行编译,运行,打包等工具,还可以与Junit结合进行单元测试。
因为Ant是基于XML的,其主要的元素有project,target,property,path, pathelement,fileset,junit.
project:是Ant构件文件的根元素,Ant构件文件至少包含一个project元素,每个project下面包含多个target元素;主要的属性有name(指定元素名称), default(指定默认执行的target名称), basedir(指定其路径的位置,默认为构件文件的所在目录)
target:是Ant的基本执行单元,包含一个或多个具体的任务,多个target可以互相依赖(一般这也是必要的),属性主要有name,depends,if,unlesss,description
property:可心看作是参数的定义,主要的属性有name,value(指定property的值), location(使property(预)指向一个文件(夹))
path,pathelement,fielset均与路径相关,路径字符串中用“;”或“:”表示分隔;path元素一般期待看到的是一个路径,而fileset则期待看到一个文件集合;path可以用内嵌的pathelement元素来指定若干的位置,pathelemet元素有两个属性,location可以声明一个路径,而path可以声明多个路径用“:”或“;”分开; fileset可以内嵌入path中,用于指定特定的文件;path的使用方式主要有id声明然后refid引用
path例子:
<path id="classpath"> <fileset dir="lib/optional" includes="*.jar"/> </path> <path id="tests-classpath"> <pathelement location="${build.classes}"/> <path refid="classpath"/> </path>
delete:属性有dir, file;
例子如下:
(1)删除单个文件的实例: <delete file="ant.jar"/> 这个例子的作用是删除基目录下的ant.jar文件。 (2)删除目录及其下文件的实例: <delete dir="lib"/> 这个例子的作用是删除lib目录,包括这个目录的所有子目录及文件,可以通过include或exclude类型指定删除的部分文件,而不是目录下的所有文件。
<delete dir="lib" include="*.class">
或者用fileset
<delete>
<fileset dir="." include="*.class"/>
</delete>
引用外部Ant文件:http://blog.csdn.net/samlei/article/details/4231496
例子:
<?xml version="1.0"?> <project default="compile" name="Plugin Project" basedir="."> <description>My plugin</description> <property name="srcDir" location="."/> <property name="runDir" location="./../.." /> <path id="ij"> <pathelement path=".:./../../ij.jar"/> </path> <target name="init"> </target> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${srcDir}"> <classpath> <path refid="ij" /> </classpath> </javac> </target> <target name="run" description="run the ImageJ with the external build.xml"> <ant antfile="build.xml" dir="${runDir}" inheritall="true" target="run"> </ant> </target> <target name="clean"> <delete> <fileset dir="." includes="*.class"/> </delete> </target> </project>
Ant基本使用例子:
<?xml version="1.0"?> <project name="study" default="compile" basedir="."> <property name="srcDir" value="firstProject"></property> <property name="destDir" value="copyfile"></property> <target name="init"> <mkdir dir="${destDir}"/> <mkdir dir="newdir" /> <copy todir="${destDir}"> <fileset dir="${srcDir}"/> </copy> </target> <!--输出信息(日志与监控器)有file,append属性--> <target name="echo" depends="init"> <echo message="Hello,Amigo" /> </target> <target name="compile" depends="init"> </target> <target name="move" depends="init"> <move todir="newdir"> <fileset dir="${srcDir}"/> </move> </target> <target name="clean" depends="init"> <delete file=""/> <delete dir="${destDir}"/> </target> </project>
Ant与Java:
<?xml version="1.0"?> <project default="run" name="Project Argon" basedir="."> <description>A simple Java project</description> <property name="srcDir" location="."/> <property name="buildDir" location="build"/> <property name="distDir" location="dist"/> <property name="main-class" value="Runners.RunnerDemo" /> <property name="main-class1" value="Runners.RunnerPart1" /> <property name="main-class2" value="Runners.RunnerPart2" /> <target name="init"> <tstamp/> <mkdir dir="${buildDir}"/> <mkdir dir="${distDir}"/> </target> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${buildDir}"/> </target> <target name="run" depends="compile"> <java fork="true" classpath="${buildDir}" classname="${main-class}" /> </target> <target name="run1" depends="compile"> <java fork="true" classpath="${buildDir}" classname="${main-class1}" /> </target> <target name="run2" depends="compile"> <java fork="true" classpath="${buildDir}" classname="${main-class2}" /> </target> <target name="dist" depends="compile"> <jar destfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}"> <manifest> <attribute name="Built-By" value="${user.name}"/> <attribute name="Main-Class" value="package.Main"/> </manifest> </jar> <jar destfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}"/> </target> <target name="clean"> <delete dir="${buildDir}"/> <delete dir="${distDir}"/> <delete file="trash"/> <delete file="result.txt"/> </target> </project>
ant与junit结合:
<?xml version="1.0"?> <project default="junit" name="Project Argon" basedir="."> <description>A simple Java project</description> <property name="srcDir" location="."/> <property name="buildDir" location="build"/> <property name="distDir" location="dist"/> <property name="reportsDir" Location="report"/> <path id="tcls"> <pathelement path="./build" /> <pathelement path="."/> <pathelement path="./junit-4.9.jar" /> <pathelement path="./../ImageReader/ImageReader.jar" /> </path> <target name="init"> <tstamp/> <mkdir dir="${buildDir}"/> <mkdir dir="${distDir}"/> <mkdir dir="${reportsDir}" /> </target> <target name="compile" depends="init"> <javac classpath=".:./../ImageReader/ImageReader.jar:./junit-4.9.jar" srcdir="${srcDir}" destdir="${buildDir}"/> </target> <target name="junit" depends="compile"> <junit printsummary="yes"> <classpath> <path refid="tcls"/> </classpath> <formatter type="xml" usefile="true"/> <batchtest fork="yes" todir="${reportsDir}"> <fileset dir="." includes="*Test.java" /> </batchtest> </junit> <junitreport todir="${reportsDir}"> <fileset dir="${reportsDir}"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${reportsDir}/html"/> </junitreport> </target> <target name="dist" depends="compile"> <jar destfile="${distDir}/package-${DSTAMP}.jar" basedir="${buildDir}"> <manifest> <attribute name="Built-By" value="${user.name}"/> <attribute name="Main-Class" value="package.Main"/> </manifest> </jar> <jar destfile="${distDir}/package-src-${DSTAMP}.jar" basedir="${srcDir}"/> </target> <target name="clean"> <delete dir="${buildDir}"/> <delete dir="${distDir}"/> <delete dir="${reportsDir}"/> </target> </project>
ant与jar结合(推荐使用)
<?xml version="1.0" encoding="UTF-8"?> <project default="run" name="Project" basedir="."> <description>A simple Java project</description>
<!-- 定义全局属性,使用location属性提供对不同平台的支持 --> <property name="srcDir" location="."/> <property name="buildDir" location="build" /> <property name="distDir" location="dist" />
<!-- 定义可运行主类 --> <property name="main-class" value="process.algorithms.Ch1Introduction" />
<!-- 设置classpath -->
<path id="rt">
<pathelement path="./../rt.jar" />
</path>
<path id="mainclass">
<pathelement path="process/algorithms" />
<pathelement path="./../rt.jar" />
</path>
<!-- 初始化工程结构 --> <target name="init"> <mkdir dir="${buildDir}" /> <mkdir dir="${distDir}" /> </target> <!-- 编译工程 --> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${buildDir}"> <classpath> <path refid="rt" /> </classpath> </javac> </target> <!-- 打包工程 --> <target name="package" depends="compile" description=""> <jar destfile="${distDir}/${ant.project.name}.jar" basedir="${buildDir}"> <manifest> <!-- 设置jar运行时的可运行主类 --> <attribute name="Main-Class" value="${main-class}"/> <attribute name="Built-By" value="Harrison Wang"/> </manifest> </jar> </target> <!-- 运行jar --> <target name="run" depends="package"> <java jar="${distDir}/${ant.project.name}.jar" fork="true"/> </target> <!-- 清理工程 --> <target name="clean">
<!-- <delete> <fileset dir="." includes="*.class"/> </delete>
--> <delete dir="${buildDir}" /> <delete dir="${distDir}" /> </target> </project>