一、ant环境变量的配置
1. 在apache官网上下载ant应用插件
2. 在环境变量中添加ANT_HOME变量,变量值为ant的解压路径
如当前的 ANT_HOME D:\Program Files\Java\apache-ant-1.9.7-bin
在path种添加 ant中的bin目录
Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%ANT_HOME%\bin
3. 测试ant环境是否安装成功
运行一个docs窗口,在命令符中输入 ant
二、ant标签用法
1.基本格式
<?xml version="1.0"?>
<project default="init">
<target name="init">
</target>
</project>
Ant是xml格式的,顶级 project 元素需要包含一个 default 属性,如果在 Ant 被调用时没有指定目标,这个属性将指定要执行的目标。然后需要使用 target 元素来定义该目标本身
2.标签用法
(1)description 注释
<?xml version="1.0"?>
<project default="init" name="Project">
<description>
A simple project introducing the use of descriptive tags in Ant build files.
</description>
<!-- XML comments can also be used -->
<target name="init" description="Initialize Argon database">
<!-- perform initialization steps here -->
</target>
</project>
Ant 定义了它自己的description 元素和 description 属性,它们可用于提供更结构化的注释。也可以使用xml种默认的注释字符
(2)property 定义变量
<property name="metal“ value="beryllium"/>
定义了一个名称为 metal的变量,变量的值为beryllium,在下面的文档中通过 ${metal}来使用变量。如:<property name="metal-database" value="${metal}.db"/>
(3)location
Ant 的 location 属性专门设计用于以平台无关的方式包含文件系统路径。像下面这样使用 location 来代替value:
<property name="database-file" location="archive/databases/${metal}.db"/>
Location的作用与value一样,${database-file}值为archive/databases/${metal}.db.
区别是Location用于路径,例如,/ 与 \)的平台来说,这样可能在跨越不同平台时不会导致问题
(4)depends 确定目标的执行顺序
<target name="init"/>
<target name="preprocess" depends="init"/>
<target name="compile" depends="init,preprocess"/>
<target name="package" depends="compile"/>
如果让 Ant 完成 compile 步骤,它将判断出需要首先执行 init 和preprocess 这两个目标。init 目标不依赖其他任何目标,因此它将首先被执行。然后 Ant 检查 preprocesstarget,发现它依赖 init 目标;由于已经执行了后者,Ant 不会再次执行它,因而开始执行 preprocess 目标。最后可以执行 compile 任务本身。
(5)javac 编译源代码
<javac srcdir="src"/>
这个标签寻找 src 目录中以 .java 为扩展名的所有文件,并对它们调用 javac 编译器,从而在相同的目录中生成类文件。当然,将类文件放在一个单独的目录结构中通常会更清晰;可以通过添加destdir 属性来让 Ant 做到这点
classpath:等价于 javac 的 -classpath 选项。
debug="true":指示编译器应该带调试信息编译源文件。
javac 任务的一个重要特点在于,它仅编译那些它认为需要编译的源文件。如果某个类文件已经存在,并且对应的源文件自从该类文件生成以来还没有改变过,那么该源文件就不会被重新编译。
javac任务的输出显示了实际被编译的源文件的数目。
这种行为刻画了 Ant 的许多任务的特点:如果某个任务能够确定所请求的操作不需要执行,那么该操作就会被跳过。
(6)jar 创建jar文件
<jar destfile="package.jar" basedir="classes"/>
这将创建一个名为 package.jar 的 JAR 文件,并把 classes 目录中的所有文件添加到其中(JAR文件能够包含任意类型的文件,而不只是类文件)。此处没有指定清单文件,因此 Ant 将提供一个基本的清单文件
manifest 属性允许指定一个用作该 JAR 文件的清单的文件。清单文件的内容还可以使用 manifest任务在生成文件中指定。这个任务能够向文件系统写入一个清单文件,或者能够实际嵌套在 jar 之内,以便一次性地创建清单文件和 JAR 文件。
<jar destfile="package.jar" basedir="classes">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
(6)tstamp 时间戳
DSTAMP 设置为当前日期,默认格式为yyyymmdd 如:20031217
TSTAMP 设置为当前时间,默认格式为hhmm 如:1603
TODAY 设置为当前日期,带完整的月份 如:2003年12月17日
例:
<target name=”dist” depends=””>
<tstamp></tstamp>
<jar destfile=”${dist}/package-${DSTAMP}.jar” basedir=”${compile}”>
<manifest>
<attribute name = “Built-By” value=”${user.name}”/>
<attribute name = “Main-Class” value=”com.test.Test”/>
</manifest>
</jar>
</target>
(7)mkdir 创建目录
<mkdir dir="archive/metals/zinc"/>
mkdir 任务的另一个有用特性是它的如下能力:在父目录还不存在时创建它们
如果目标目录已经存在,mkdir 任务不会发出错误消息,而只是假设它的工作已经完成,从而什么也不做
(8)delete 删除目录目录
这将删除指定的目录连同它包含的所有文件以及子目录。使用 file 属性而不是 dir 属性可以指定要删除的单个文件
(9)copy 复制和移动文件及目录
<copy file="src/Test.java" tofile="src/TestCopy.java"/>
(10)move 执行重命名操作而不是拷贝文件
<move file="src/Test.java" tofile="src/TestCopy.java"/>
默认情况下,Ant 仅输出它执行的移动和复制操作的摘要,包括诸如已移动或复制的文件的数量等信息。如果想看到更详细的信息,包括涉及的文件名称等,可以将 verbose 属性设置为true
(11)zip 创建压缩文件
<zip destfile="output.zip" basedir="output"/>
(12)unzip 解压缩文件
<unzip src="output.tar.gz" dest="extractDir"/>
还可以包括 overwrite 属性来控制覆盖行为。默认设置是覆盖与正在被提取的归档文件中的条目相匹配的所有现有文件
(13)replace 它执行文件中的查找和替换操作
<replace file="input.txt" token="old" value="new"/>
token 属性指定要查找的字符串,value 属性指定一个新的字符串,查找到的标记字符串的所有实例都被替换为这个新的字符串
替换操作将在文件本身之内的适当位置进行。为了提供更详细的输出,可把 summary 属性设置为true。这将导致该任务输出找到和替换的标记字符串实例的数目
(14)匹配模式
可以对目录执行模式匹配。例如,模式 src*/*.java 将匹配带 src 前缀的任何目录中的所有Java 文件。
还有另一种模式结构:**,它匹配任意数量的目录。例如,模式 **/*.java 将匹配当前目录结构下的所有 Java 文件。
<copy todir="archive">
<fileset dir="src">
<include name="*.java"/>
</fileset>
</copy>
fileset 默认情况下包含指定 src 目录下的所有文件,因此为了仅选择 Java 文件,我们对模式使用一个 include 元素。类似地,我们可以对另一个模式添加一个 exclude 元素,从而潜在地排除include 指定的匹配项。甚至可以指定多个include 和 exclude 元素;这样将得到一组文件和目录,它们包含 include 模式的所有匹配项的并集,但排除了 exclude 模式的所有匹配项
三、使用自定义任务扩展ANT
1、在下载的ant找到ant.jar包导入到项目工程下
2、创建类 com.Test 继承org.apache.tools.ant.Task,重写excuet方法;
3、标签中有两个属性 file和tofile。在类test中创建file和tofile两个属性,并建立相应的get和set方法,在excute中进行功能实现
4、标签中的用法:
<taskdef name="myTesk" classname=" com.Test " classpath="."/>
<target name=” targetname”>
<myTest file=”value1” tofile=”value2”/>
</target>
Classpath的值为 Test.class 的存放CLASSPATH