ANT常用命令
ant:使用当前目录下的build.xml运行Ant,执行缺省的target。
ant -buildfile test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。
ant -file test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。
ant -f test.xml:使用当前目录下的test.xml运行Ant,执行缺省的target。
ant -f test.xml dist:使用当前目录下的test.xml运行Ant,执行一个叫做dist的target。
ant -buildfile test.xml -Dbuild=build/classes dist 执行test.xml 中dist的target,并设定build属性
Ant核心概念简介
project:每个构建文件包含一个工程。
depends:每个工程包含若干个目标(target)。目标可以依赖于其他的目标。
task:目标包含一个或多个任务(task)。
ANT示例
目录结构文字说明
在建立build.xml文件之前,我们先说下目录结构:
工程主目录: C:/course/ant/demo
源程序目录: /src
编译后的 class文件目录:/classes
打包好的jar程序目录:/hello.jar
工程配置文件:/build.xml
首先,我们使用文本编辑器写第一个程序:HelloWorld.java
package test.ant;
public class HelloWorld {
public static void main(String[] args)
System.out.println(“hello world”);
}
}
再建立一个build.xml文件完成上面的步骤,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src" />
<property name="dest" value="classes" />
<property name="hello_jar" value="hello.jar" />
<target name="init">
<mkdir dir="${dest}" />
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}" />
</target>
<target name="jar" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
<target name="run" depends="jar">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
<target name="clean">
<delete dir="${dest}" />
<delete file="${hello_jar}" />
</target>
<target name="rerun" depends="clean, run">
<ant target="clean" />
<ant target="run" />
</target>
</project>
解释以上Ant配置文件
<project name="HelloWorld" default="run" basedir="."/>
Ant的所有内容必须包含在这个里面,name是我们给它取的名字,
basedir看名字就知道是工作的根目录。其中的”.”代表当前目录。
default代表默认要做的事情。
<property name="src" value="src" />
<property name="dest" value="classes" />
<property name="hello_jar" value="hello.jar" />
类似程序中的变量
<target name="init">
<mkdir dir="${dest}" />
</target>
目的:创建一个文件夹
把我们想做的每一件事写成一个target,它有一个名字。使用mkdir来创建文件夹
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}" />
</target>
目的:编译程序,把源程序编译到目标地点
depends 是它所依赖的target,依赖的target会先执行
<target name="jar" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
目的:打jar 包
<target name="run" depends="jar">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
目的:运行jar包内的程序
<target name="clean">
<delete dir="${dest}" />
<delete file="${hello_jar}" />
</target>
目的:删除生成的文件
<target name="rerun" depends="clean, run">
<ant target="clean" />
<ant target="run" />
</target>
目的:再次运行,这里显示了如何在一个 target 里边调用其他的 target
步骤再重申一遍:
建一个src文件夹,然后写一个HelloWorld.java,按照包结构目录放进去;
写build.xml文件
在命令行输入 cmd, ant做测试。
project属性
name 项目名称,可自由定义。
default 定义一个缺省(默认)的target,指定target的build.xml时,就会执行这个缺省的target。
basedir 用于定义项目的基路径。
description 表示项目的描述
property属性
将属性名放在“${}”之间并放在属性值的位置来实现的
首先设定property:
<property name="src" value="src" />
<property name="dest" value="classes" />
然后在其他地方引用property:
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}" />
</target>
target属性
name target的名字。
depends 用逗号分隔的target的名字列表,也就是依赖列表
if 执行target需要清除设定的属性名
unless 执行target需要清除设定的属性名
description 描述target的功能,这些描述可由-projexthelp 命令行输出。
Ant常用task
设置classpath
当需要指定类似路径的值时,可以使用嵌套元素。一般的形式是
<classpath>
<pathelement path="${classpath}"/>
<pathelement location="lib/jar.jar"/>
</classpath>
location属性指定了相对于project基目录的一个文件和目录
而path属性接受逗号或分号分隔的一个位置列表
输出信息
<echo message=”XXXXXX”>
<echo>XXXXXX</echo>
复制文件与目录<copy>
file表示源文件
tofile
表示目标文件
todir 表示目标目录
overwrite表示指定是否覆盖目标文件,默认值是不覆盖。
includeEmptyDirs
表示制定是否拷贝空目录,默认值为拷贝
failonerror
表示指定如目标没有发现是否自动停止,默认值是停止
复制一个文件到当前目录,并重命名
<copy file="myfile.txt" tofile="mycopy.txt"/>
复制一个文件到指定目录
<copy file="myfile.txt" todir="build /newdir"/>
复制一个文件到指定位置(使用copyfile)
<copyfile src="test.java" dest="subdir/test.java"/>
复制一个文件集合到一个目录
<copy todir="build/newdir"><fileset dir="src_dir"/></copy>
复制一个文件集合到一个目录,但不包含某些文件
<copy todir="dest/dir">
<fileset dir="src_dir" excludes="**/*.java"/>
</copy>
删除文件与目录<delete>
file表示要删除的文件
dir表示要删除的目录
includeEmptyDirs 表示指定是否要删除空目录,默认值是删除。
failonerror 表示指定当碰到错误是否停止,默认值是自动停止
删除一个文件
<delete file="/lib/aaa.jar"/>
删除一个目录
<delete dir="lib"/>
删除一个目录下符合规则的文件,包括子目录。这里是删除.bak文件
<delete>
<fileset dir="." includes="**/*.bak"/>
</delete>
删除一个目录下所有文件和目录,包括当前目录
<delete includeEmptyDirs="true">
<fileset dir="build"/>
</delete>
<fileset dir="build"/>也可以写成<fileset dir="build" includes="**/*"/>
删除当前目录下所有的svn相关文件
<delete defaultexcludes="false">
<fileset dir="src" includes="**/*.svn"/>
</delete>
删除文件目录树
<deltree dir="dist"/>
建立目录<mkdir>
<mkdir dir="./build/lib"/>
<mkdir dir="${dist}/lib"/>
打jar包
<target name="jar" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}" />
</target>
或者
<jar destfile="${dist}/lib/app.jar"
basedir="${build}/classes"
includes="mypackage/test/**"
excludes="**/*Test*.class"
/>
运行jar包
<target name="run" depends="jar">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
传递参数运行
<java classname="test.Main">
<arg value="-h"/>
<classpath>
<pathelement location="dist/test.jar"/>
<pathelement path="/Users/antoine/dev/asf/ant-core/bootstrap/lib/ant-launcher.jar />
</classpath>
</java>
发布程序
<property name="project.name" value="antdemo"/>
<property name="webserver" value="C:/java/tomcat-6.0.18/webapps" />
<!-- 发布项目(其实就是WebContent目录)到web容器下 -->
<target name="deploy" depends="init,compile,test" description="将工程打成war包">
<echo message="deploy项目到Web服务器" />
<mkdir dir="${webserver}/${project.name}" />
<copy todir="${webserver}/${project.name}" overwrite="true">
<fileset dir="${WebContent.dir}" />
</copy>
</target>
用Ant完成生成javadoc的任务
<target name="create_doc">
<javadoc destdir="${distDir}" encoding="UTF-8" docencoding="UTF-8" charset="utf-8"><!-- 防止中文乱码->
<!--
dir是你的代码位置,记住是java文件的位置而不是class文件的位置-->
<packageset dir="${srcDir}">
<!-- exclude是不想生成哪些类的javadoc -->
<exclude name="${excludeClasses}" />
<include name="com/***/util/**"/>
</packageset>
</javadoc>
</target>