Apache Ant Basic Demo

工程目录如下图所示:

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);
		}
	}
}
 

猜你喜欢

转载自agilestyle.iteye.com/blog/1758474