工程目录如下图所示:
build.xml
<?xml version="1.0" encoding="UTF-8"?> <project default="execute"> <property name="build.dir" location="build"> </property> <!--使用属性定义相应的路径时,一定使用location而不要使用value--> <property name="build.classes" location="${build.dir}\classes"> </property> <property name="build.src" location="${build.dir}/src"> </property> <property name="build.lib.dir" location="${build.dir}/dist"> </property> <!-- <property name="execute.class" value="org.fool.ant.test.HelloWorld"/> <property name="jar.name" value="ant.jar"></property> --> <!-- 如果属性太多,可以将属性放置到一个外部文件中定义,之后进行引用 特别注意:如果是路径不建议在外部文件中定义,因为此时就不会设置location的值 --> <property file="build.properties"> </property> <!--把环境变量中的参数到处到env这个变量中--> <property environment="env"> </property> <target name="test"> <echo>${ant.home}</echo> <echo>${ant.version}</echo> <echo>${env.CATALINA_HOME}</echo> <echo>${env.OS}</echo> </target> <!-- fileset可以设定一组文件集来进行操作,dir指明文件集要进行选择的路径, 通过id可以指定这个文件的名称,在使用的时候进行直接的引入 include和exclude可以设定包含返回和排除范围**/*.*所有目录中的所有文件 Ant风格资源地址支持3种匹配符 ? 匹配文件名中的一个字符 * 匹配文件名中的任意个字符 ** 匹配多层路径 --> <fileset id="src.path" dir="src"> <include name="**/*.*" /> <exclude name="**/Test*.java" /> </fileset> <target name="init"> <delete dir="${build.dir}"> </delete> <mkdir dir="${build.dir}" /> <mkdir dir="${build.src}" /> <mkdir dir="${build.classes}" /> <mkdir dir="${build.lib.dir}" /> </target> <target name="copySrc" depends="init"> <copy todir="${build.src}"> <fileset refid="src.path"> </fileset> </copy> </target> <target name="compile" depends="init"> <javac destdir="${build.classes}" srcdir="src" includeantruntime="on"> </javac> </target> <target name="jar" depends="compile"> <jar destfile="${build.lib.dir}/ant.jar" basedir="${build.classes}"> <manifest> <attribute name="Main-Class" value="${execute.class}" /> <attribute name="Build-By" value="Jason" /> </manifest> </jar> </target> <target name="execute" depends="jar, copySrc"> <echo>基于类路径的classname来完成执行</echo> <java classname="${execute.class}" classpath="${build.classes}"> <arg value="Jordan" /> <arg value="Bryant" /> </java> <echo>基于jar文件执行</echo> <java jar="${build.lib.dir}/${jar.name}" fork="true"> <arg value="Jordan" /> <arg value="Bryant" /> </java> </target> </project>
build.properties
execute.class = org.fool.ant.test.HelloWorld jar.name = ant.jar
HelloWorld.java
package org.fool.ant.test;
public class HelloWorld
{
public static void main(String[] args)
{
for (String arg : args)
{
System.out.println("Hello " + arg);
}
}
}