Ant笔记
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
<p>package test.ant;</p><p>public class HelloWorld {</p><p> public static void main(String[] args)</p><p> System.out.println(“hello world”);</p><p> }</p><p>}</p><p></p>
再建立一个build.xml文件完成上面的步骤,内容如下:
<p><?xml version="1.0" encoding="UTF-8" ?></p><p><project name="HelloWorld" default="run" basedir="."></p><p> <property name="src" value="src" /></p><p> <property name="dest" value="classes" /></p><p> <property name="hello_jar" value="hello.jar" /></p><p>
</p><p> <target name="init"></p><p> <mkdir dir="${dest}" /></p><p> </target></p><p>
</p><p> <target name="compile" depends="init"></p><p> <javac srcdir="${src}" destdir="${dest}" /></p><p> </target></p><p>
</p><p> <target name="jar" depends="compile"></p><p> <jar jarfile="${hello_jar}" basedir="${dest}" /></p><p> </target></p><p>
</p><p> <target name="run" depends="jar"></p><p> <java classname="test.ant.HelloWorld" classpath="${hello_jar}" /></p><p> </target></p><p>
</p><p> <target name="clean"></p><p> <delete dir="${dest}" /></p><p> <delete file="${hello_jar}" /></p><p> </target></p><p>
</p><p> <target name="rerun" depends="clean, run"></p><p> <ant target="clean" /></p><p> <ant target="run" /></p><p> </target></p><p></project></p>
解释以上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包
<p><target name="jar" depends="compile"></p><p> <jar jarfile="${hello_jar}" basedir="${dest}" /></p><p></target></p><p>或者</p><p><jar destfile="${dist}/lib/app.jar"</p><p> basedir="${build}/classes"</p><p> includes="mypackage/test/**"</p><p> excludes="**/*Test*.class"</p><p>/></p><p></p>
运行jar包
<target name="run" depends="jar">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}" />
</target>
传递参数运行
<p><java classname="test.Main"></p><p> <arg value="-h"/> </p><p><classpath> </p><p> <pathelement location="dist/test.jar"/></p><p><pathelement path="/Users/antoine/dev/asf/ant-core/bootstrap/lib/ant-launcher.jar /> </p><p></classpath> </p><p></java></p>
发布程序
<p><property name="project.name" value="antdemo"/></p><p><property name="webserver" value="C:/java/tomcat-6.0.18/webapps" /></p><p><!-- 发布项目(其实就是WebContent目录)到web容器下 --></p><p><target name="deploy" depends="init,compile,test" description="将工程打成war包"></p><p> <echo message="deploy项目到Web服务器" /></p><p> <mkdir dir="${webserver}/${project.name}" /></p><p> <copy todir="${webserver}/${project.name}" overwrite="true"></p><p> <fileset dir="${WebContent.dir}" /></p><p> </copy></p><p></target></p>
用Ant完成生成javadoc的任务
<p><target name="create_doc"></p><p> <javadoc destdir="${distDir}" encoding="UTF-8" docencoding="UTF-8" charset="utf-8"><!-- 防止中文乱码-></p><p> <!-- dir是你的代码位置,记住是java文件的位置而不是class文件的位置--></p><p> <packageset dir="${srcDir}"></p><p> <!-- exclude是不想生成哪些类的javadoc --></p><p> <exclude name="${excludeClasses}" /></p><p>
</p><p> <include name="com/***/util/**"/></p><p> </packageset></p><p> </javadoc></p><p></target></p>
页:
[1]