ant 应用指南
添加时间:2013-6-16 点击量:
  一、概述
ant 是一个将软件编译、测试、安排等步调接洽在一路加以主动化的一个对象,大多用于Java景象中的软件开辟。在实际软件开辟中,有很多处所可以用到ant。
 
开辟景象:
System:Windows
JDK:1.6+
IDE:eclipse
ant:1.9.1
 
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
 
二、长处
ant 是Apache软件基金会JAKARTA目次中的一个子项目,它有以下的长处:
1、跨平台性:Ant是纯Java说话编写的,所以具有很好的跨平台性。
2、操纵简单:Ant是由一个内置任务和可选任务构成的,用ant任务就像是在dos中写号令行一样。Ant运行时须要一个XML文件(构建文件)。 Ant经由过程调用target树,就可以履行各类task。每个task实现了特定接口对象。
3、保护简单、可读性好、集成简单:因为Ant构建文件 时XML格局的文件,所以很轻易保护和书写,并且布局很清楚。Ant可以集成到开辟景象中。因为Ant的跨平台性和操纵简单的特点,它很轻易集成到一些开辟景象中去。
 
三、安装和设备
1、ant,http://mirror.esocc.com/apache//ant/binaries/apache-ant-1.9.1-bin.zip
2、解压zip紧缩包,将紧缩包放置你要放置的目次。我这里放置在D:\apache-ant-1.9.1,目次布局如下:
bin是ant的法度运行进口,若是没有设备ANT_HOME的景象下,可以经由过程bin目次中的bat法度进交运行build任务。
如:在cmd中运行ant.bat就可以履行法度,当然你选择要当前目次中存在一个build.xml(build.xml是默认的ant履行文件,当然你可以指定其他文件)
etc目次中存放的都是一些xsl的输出模板,创建一个加强的导出各类任务的XML输出,使你的build文件摆脱过期的警告
lib目次中存放的是ant法度须要依附的jar包
manual目次是ant法度的帮助文档
3、在我的电脑 –> 右键属性 –> 高等体系设备 -> 景象变量 中设备ant
新建体系变量 ANT_HOME = D:\apache-ant-1.9.1
如许景象变量就设备好了,但前提你须要设备jdk的景象变量。若是你没有设备jdk的景象变量,那么请你先设备好jdk变量。jdk景象设备办法如下:
(1),安装JDk到其默认目次:C:\Program Files\Java\jdk1.5.0_05 (没有jdk去官方一个)
C:\Program Files\Java\jdk1.5.0
感化:告诉体系JVM在什么处所
(2),右击我的电脑,选属性,高等,景象变量
(3),在体系变量栏点新建,呈现新建体系变量对话框,在变量名中填上JAVA_HOME ,变量值:C:\Program Files\Java\jdk1.5.0_05
(4),断定后在体系变量(S)栏再新建一个景象变量CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(开首的dot和;不克不及少)
(5),断定后在体系变量(S)栏查找并选中变量为Path的选项,点编辑在变量值(V)的末尾添加:
%JAVA_HOME%\bin     
若是没有找到PATH变量,本身新建一个!
若是你不想每次运行都要cmd到class地点目次然后履行java号令,可以把所有的class文件放到同一的目次组织下,然后将此目次也追加到CLASSPATH下。
测试代码如下:
public class Test {
    public static void main(String[] args) {
              System.out.println("Hello World!");
    }
}
用记事本编辑后存为Test.java(文件名与类名雷同)文件,打开号令行窗口,
cd到文件地点目次下:
javac Test.java                       //编译号令
java Test                                //履行法度
若是输出为:Hello World!       OK,设备完毕,不然,从头搜检。
 
四、测试ant
在启动,运行cmd的dos窗口中输入ant,如图:
若是呈现这个,那么恭喜你安装成功了!不然就失败了,搜检下前面的步调有没有错误。上方号令会履行ant法度,ant默认履行build.xml中的任务,这里在Administrator目次中没有这个文件。
若是安装失败,你看看是否存在一些景象:
1、没有设备JAVA_HOME 或设备错误,并且JAVA_HOME\bin\java.exe存在
2、没有设备ANT_HOEM 或设备错误,并且ANT_HOME\bin\ant.bat存在
3、搜检你的景象变量的path变量中,有木有设备...;%ANT_HOME%\bin;...
%PATH%=...maybe-other-entries...;%ANT_HOME%\bin;...maybe-other-entries...
 
五、ant的运行时景象
ant在运行号令的时辰,有时辰会呈现一些公园的jar库。这些库会存在于每个ant中,那么这个时辰我们可以把这个jar包放到ant_home\lib目次中作为全局的库应用。
若是你不想“污染”原始的ant法度,那么你可以把jar包放在当前windows用户的目次下,具体地位应当是¥{user.home}/.ant/lib 下。没有以上目次可以手动建树。
若是你只是姑且要添加lib,又不想把lib添加到当前ant中。你可以在运行ant法度的时辰指定依附的lib参数。
同时,你还可以在当前build的classpath目次中添加你的依附jar包。
六、ant号令
语法元素申明如下:
-help
显示描述ant 号令及其选项的帮助信息
-projecthelp
显示包含在构建文件中的、所有效户编写的帮助文档。即为各个<target>中description 属性的文本,以及包含在<description>元素中的任何文本。将有description 属性的目标列为主目标(Main target),没有此属性的目标则列为子目标(Subtarget)。
-version
请求ant 显示其版本信息,然撤退猬缩出。
-quiet
按捺并非由构建文件中的echo 任务所产生的大多半消息。
-verbose
显示构建过程中每个操纵的具体消息。此选项与-debug 选项只能选其一。
-debug
显示Ant 和任务开辟人员已经标记为调试消息的消息。此选项与-verbose 只能选其一。
-emacs
对日记消息进行格局化,使它们可以或许很轻易地由Emacs 的shell 模式(shellmode)所解析;也就是说,打印任务事务,但并不缩排,在其之前也没有[taskname]。
-logfile filename
将日记输出重定向到指定文件。
-logger classname
指定一个类来处理惩罚Ant 的日记记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger 接口。
-listener classname
为Ant 声明一个类,并增长到其者列表中。在Ant与IDE或其他Java法度集成时,此选项很是有效。可以浏览第六章以懂得有关者的更多信息。必须将所指定的类编写为可以处理惩罚Ant 的构建消息接发。
-buildfile filename
指定Ant 须要处理惩罚的构建文件。默认的构建文件为build.xml。
-Dproperty=value
在号令行上定义一个特点名-值对。
-find filename
指定Ant 该当处理惩罚的构建文件。与-buildfile 选项不合,若是所指定文件在当前目次中未找到,-find 就请求Ant 在其父目次中再进行搜刮。这种搜刮会持续在其祖先目次中进行,直至达到文件体系的根为止,在此若是文件还未找到,则构建失败。
-atuoproxy jdk1.5以上的可以应用设置
-nouserlib 运行ant时不应用用户lib中的jar包
-nice 设计主线程优先级
-logfile 应用指定的log日记
-noinput 不容许交互输入
-keep-going, -k 履行不依附于所有目标
-propertyfile 加载所有属性设备文件 -d 属性文件优先
<project default="all">
<property name="pro_a" value="a value" />
<property name="pro_b" value="b value" />
<path id="rt.path">
<pathelement location="¥{java.home}/jre/lib/rt.jar" />
</path>
<target name="all">
<javac srcdir=".">
<classpath refid="a.path" />
</javac>
</target>
</project>
重视:
● 所有构建文件都要有<project>元素,并且至少有一个<target> 元素。
● 对于<project> 元素的default 属性并不必然须要默认值。
● 构建文件并不必然要被定名为build.xml。不过build.xml 是ant 要搜刮的默认文件名。
● 每个构建文件只能有一个<project> 元素。
在cmd窗口中进入到当前build.xml目次
ant
在当前目次下的build.xml运行Ant,履行缺省的target。
ant -buildfile build-test.xml
在当前目次下的build-test.xml运行Ant,履行缺省的target。
ant -buildfile build-test.xml clean
在当前目次下的build-test.xml运行Ant,履行一个叫做clean的target。
ant -buildfile build-test.xml -Dbuild=build/classes clean
在当前目次下的build-test.xml运行Ant,履行一个叫做clean的target,并设定build属性的值为build/classes。
七、ant脚本:应用节点、元素和属性、号令指令
1、project 节点元素
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应当包含一个 project 元素,不然会产生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者显现一下 project 元素的各属性。
● name 属性:用于指定 project 元素的名称。
● default 属性:用于指定 project 默认履行时所履行的 target 的名称。
● basedir 属性:用于指定基路径的地位。该属性没有指按时,应用 Ant 的构件文件的附目次作为基准目次。
<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
<target name="print-dir">
<echo message="The base dir is: ¥{basedir}" />
</target>
</project>
从上例可以看出,在这里定义了default 属性的值为print-dir,即当运行ant 号令时,若是没有指明履行的target,则将履行默认的target(print-dir)。此外,还定义了basedir 属性的值为 “.” ,.默示当前目次,进入当前目次后运行ant 号令,得一下成果:
&#160;
2、target节点元素
target为ant的根蒂根基履行单位或是任务,它可以包含一个或多个具体的单位/任务。多个target 可以存在彼此依附关系。它有如部属性:
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是独一的。我们可以经由过程指定 target 元素的名称来指定某个 target 。
● depends 属性:用于描述 target 之间的依附关系,若与多个 target 存在依附关系时,须要以“,”间隔。 Ant 会遵守 depends 属性中 target 呈现的次序依次履行每个 target ,被依附的target 会先履行。
● if 属性:用于验证指定的属性是存在,若不存在,地点 target 将不会被履行。
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,地点 target 将会被履行。
● description 属性:该属性是关于 target 功能的简短描述和申明。
示例:
<?xml version="1.0" ?>
<project name="ant-target" default="print">
<target name="version" if="ant.java.version">
<echo message="Java Version: ¥{ant.java.version}" />
</target>
<target name="print" depends="version" unless="docs">
<description>
a depend example!
</description>
<echo message="The base dir is: ¥{basedir}" />
</target>
</project>
从以下成果后可以看到,我们运行的是名为 print的target ,因为它依附于version这个target任务,所以 version将起首被履行,同时因为体系设备了JDK,所以 ant.java.version 属性存在,履行了version,输出信息:"[echo] Java Version: 1.6 ",version履行完毕后,接着履行 print,因为docs不存在,而unless属性是在不存在时进入地点target 的,由此可知 print得以履行,输出信息:"[echo] The base dir is:D:\Workspace\AntExample\build"。
&#160;
3、property属性节点元素
property元素可看作参量或者参数的定义,project 的属性可以经由过程 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以经由过程如下内容将其引:
<property file="build.properties"/>
property 元素可用作 task 的属性值。在 task 中是经由过程将属性名放在¥{属性名}之间,并放在 task 属性值的地位来实现的。
Ant 供给了一些内置的属性,它能获得的体系属性的列表与 Java 文档中 System.getProperties() 办法获得的属性一致,这些体系属性可参考 sun 网站的申明。同时, Ant 还供给了一些它本身的内置属性,如下:
basedir: project 基目次的绝对路径;&#160;&#160;
ant.file: buildfile的绝对路径,上例中ant.file值为D:\Workspace\AntExample\build;
ant.version: Ant 的版本信息,本文为1.8.1 ;
ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值;
ant.java.version: Ant 检测到的JDK版本,本文为 1.6 。
举例申明如下:
<project name="ant-project" default="example">
<property name="name" value="jojo" />
<property name="age" value="25" />
<target name="example">
<echo message="name: ¥{name}, age: ¥{age}" />
</target>
</project>
上例顶用户设置了名为name 和age的两个属性,这两个属性设置后,鄙人文中可以经由过程 ¥{name} 和 ¥{age} 分别取得这两个属性值。
4、copy号令
copy首要用来对文件和目次的复制功能。举例如下:
● 复制单个文件:
<copy file="old.txt" tofile="new.txt"/>
● 对文件目次进行复制:
<copy todir="../dest_dir">
&#160;&#160;&#160; <fileset dir="src_dir"/>
</copy>
● 将文件复制到别的的目次:
<copy file="src.txt" todir="c:/base"/>
5、号令
对文件或目次进行删除,举例如下:
● 删除某个文件:&#160;&#160;&#160;
< file="/res/image/cat.jpg"/>
● 删除某个目次:&#160;&#160;&#160;
< dir="/res/image"/>
● 删除所有的jar文件或空目次:
< includeEmptyDirs="true">
&#160;&#160;&#160;&#160;&#160;&#160; <fileset dir="." includes="/.jar"/>
</>
6、 mkdir 号令
创建目次。
<mkdir dir="/home/philander/build/classes"/>
7、 move 号令
移动文件或目次,举例如下:
● 移动单个文件:
<move file="sourcefile" tofile=”destfile”/>
● 移动单个文件到另一个目次:
<move file="sourcefile" todir=”movedir”/>
● 移动某个目次到另一个目次:
<move todir="newdir">
&#160;&#160;&#160; <fileset dir="olddir"/>
</move>
8、echo 号令
该任务的感化是按照日记或监控器的级别输出信息。它包含 message 、 file 、 append 和 level 四个属性,举例如下
<echo message="ant message" file="/logs/ant.log" append="true">
9、jar 标签节点元素
该标签用来生成一个JAR文件,其属性如下。
● destfile默示JAR文件名。
● basedir默示被归档的文件名。
● includes默示别归档的文件模式。
● exchudes默示被打消的文件模式。
● compress默示是否紧缩。
示例:
<jar destfile="¥{webRoot}/¥{ash_jar}" level="9" compress="true" encoding="utf-8" basedir="¥{dest}">
<manifest>
<attribute name="Implementation-Version" value="Version: 2.2"/>
</manifest>
</jar>
上方的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件内容
同样打包操纵的的还有war、tgz,已经解压操纵uzip
<!-- 创建zip -->
<zip basedir="¥{basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\\.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!-- 建树war包 -->
<war destfile="¥{webRoot}/ash.war" basedir="¥{basedir}/web" webxml="¥{basedir}/web/WEB-INF/web.xml">
<exclude name="WEB-INF/classes/"/>
<exclude name="WEB-INF/lib/"/>
<exclude name="WEB-INF/work/_jsp/"/>
<lib dir="¥{lib.dir}" includes="/.jar, /.so, /.dll">
<exclude name="¥{webRoot}\¥{helloworld_jar}"/>
</lib>
<lib file="¥{webRoot}/¥{helloworld_jar}"/>
<classes dir="¥{dest}" includes="/.xml, /.properites, /.xsd"> </classes>
</war>
10、javac 标签节点元素
该标签用于编译一个或一组java文件,其属性如下。
● srcdir默示源法度的目次。
● destdir默示class文件的输出目次。
● include默示被编译的文件的模式。
● excludes默示被打消的文件的模式。
● classpath默示所应用的类路径。
● debug默示包含的调试信息。
● optimize默示是否应用优化。
● verbose 默示供给具体的输出信息。
● fileonerror默示当碰着错误就主动停止。
示例
<javac srcdir="¥{src}" destdir="¥{dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
11、java 标签节点元素
该标签用来履行编译生成的.class文件,其属性如下。
● classname 默示将履行的类名。
● jar默示包含该类的JAR文件名。
● classpath所默示用到的类路径。
● fork默示在一个新的虚拟机中运行该类。
● failonerror默示当呈现错误时主动停止。
● output 默示输出文件。
● append默示追加或者覆盖默认文件。
示例
<java classname="com.hoo.test.HelloWorld" classpath="¥{hello_jar}"/>
12、arg 数据参数元素
由Ant构建文件调用的法度,可以经由过程<arg>元素向其传递号令行参数,如apply,exec和java任务均可接管嵌套<arg>元素,可认为各自的过程调用指定参数。以下是<arg>的所有属性。
● values 是一个号令参数。若是参数中有空格,但又想将它作为零丁一个值,则应用此属性。
● file 默示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目次。
● line 默示用空格分隔的多个参数列表。
● 默示路径,一个作为单个号令行变量的path-like的字符串;或作为分隔符,Ant会将其改变为特定平台的分隔符。
● pathref 引用的path(应用path元素节点定义path)的id
● prefix 前缀
● suffix 后缀
例子
<arg value="-l -a"/>
是一个含有空格的单个的号令行变量。
<arg line="-l -a"/>
是两个空格分隔的号令行变量。
<arg path="/dir;/dir2:\dir3"/>
是一个号令行变量,其值在DOS体系上为\dir;\dir2;\dir3;在Unix体系上为/dir:/dir2:/dir3 。
13、ervironment 类型
由Ant构建文件调用的外部号令或法度,<env>元素制订了哪些景象变量要传递给正在履行的体系号令,<env>元素可以接管以部属性。
● file默示景象变量值的文件名。此文件名要被转换位一个绝对路径。
● path默示景象变量的路径。Ant会将它转换为一个本地商定。
● value 默示景象变量的一个直接变量。
● key 默示景象变量名。
重视 file path 或 value只能取一个。
14、filelist 文件凑集列表
filelist 是一个支撑定名的文件列表的数据类型,包含在一个filelist类型中的文件不必然是存在的文件。以下是其所有的属性。
● dir是用于策画绝对文件名的目次。
● files 是用逗号分隔的文件名列表。
● refid 是对某处定义的一个<filelist>的引用。
重视 dir 和 files 都是须要的,除非指定了refid(这种景象下,dir和files都不容许应用)。
示例
<filelist id="docfiles" dir="¥{doc.src}" files="foo.xml,bar.xml"/>
文件凑集 ¥{doc.src}/foo.xml和¥{doc.src}/bar.xml. 这些文件也许还是不存在的文件.
<filelist id="docfiles" dir="¥{doc.src}" files="foo.xml bar.xml"/>
&#160;
<filelist refid="docfiles"/>
&#160;
<filelist id="docfiles" dir="¥{doc.src}">
<file name="foo.xml"/>
<file name="bar.xml"/>
</filelist>
15、fileset 文件类型
fileset 数据类型定义了一组文件,并凡是默示为<fileset>元素。不过,很多ant任务构建成了隐式的fileset,这申明他们支撑所有的fileset属性和嵌套元素。以下为fileset 的属性列表。
● dir默示fileset 的基目次。
● casesensitive的值若是为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true.
● defaultexcludes 用来断定是否应用默认的打消模式,默认为true。
● excludes 是用逗号分隔的须要派出的文件模式列表。
● excludesfile 默示每行包含一个打消模式的文件的文件名。
● includes 是用逗号分隔的,须要包含的文件模式列表。
● includesfile 默示每行包含一个包含模式的文件名。
示例
<fileset id="lib.runtime" dir="¥{lib.path}/runtime">
<include name="/.jar"/>
<include name="/.so"/>
<include name="/.dll"/>
</fileset>
&#160;
<fileset id="lib.container" dir="¥{lib.path}/container">
<include name="/.jar"/>
</fileset>
&#160;
<fileset id="lib.extras" dir="¥{lib.path}">
<include name="test//.jar"/>
</fileset>
16、patternset 类型
fileset 是对文件的分组,而patternset是对模式的分组,他们是慎密相干的概念。
<patternset>支撑4个属性:includes、excludex、includexfile、excludesfile,这些与fileset雷同。
patternset 还容许以下嵌套元素:include,exclude,includefile 和 excludesfile.
示例
<!-- 曲直短长 -->
<patternset id="non.test.sources">
<include name="/.java"/>
<!-- 文件名包含Test的打消 -->
<exclude name="/Test"/>
</patternset>
&#160;
&#160;
<patternset id="sources">
<include name="std//.java"/>
<!-- 断定前提 存在professional就引入 -->
<include name="prof//.java" if="professional"/>
<exclude name="/Test"/>
</patternset>
&#160;
<!-- 一组文件 -->
<patternset includesfile="some-file"/>
<patternset>
<includesfile name="some-file"/>
<patternset/>
&#160;
<patternset>
<includesfile name="some-file"/>
<includesfile name="¥{some-other-file}" if="some-other-file"/>
<patternset/>
17、filterset 类型
filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本调换。
首要属性如下:
● begintoken 默示嵌套过滤器所搜刮的记号,这是标识其开端的字符串。
● endtoken 默示嵌套过滤器所搜刮的记号这是标识其停止的字符串。
● id 是过滤器的独一标记符。
● refid 是对构建文件中某处定义一个过滤器的引用。
示例
<!-- 将目标文件build.dir目次中的version.txt文件内容中的@DATE@调换成TODAY当前日期的值,并把调换后的文件存放在dist.dir目次中 -->
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<filterset>
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
</copy>
&#160;
<!-- 自定义变量的格局 -->
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<!-- 从version.txt中的%地位开端搜刮,到地位停止,进行调换内容中的@DATE@调换成TODAY当前日期的值-->
<filterset begintoken="%" endtoken="">
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
</copy>
&#160;
<!-- 应用外部的过滤定义文件 -->
<copy toDir="¥{dist.dir}/docs">
<fileset dir="¥{build.dir}/docs">
<include name="/.html">
</fileset>
<filterset begintoken="%" endtoken="">
<!-- 过来文件从外部引入,过来的属性和值设备在dist.properties文件中 -->
<filtersfile file="¥{user.dir}/dist.properties"/>
</filterset>
</copy>
&#160;
<!-- 应用引用体式格式,反复哄骗过滤集 -->
<filterset id="myFilterSet" begintoken="%" endtoken="">
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
&#160;
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<filterset refid="myFilterSet"/>
</copy>
18、path类型
path元素用来默示一个类路径,不过它还可以用于默示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时辰,此分隔符将庖代当前平台中所有的路径分隔符,其拥有的属性如下。
● location 默示一个文件或目次。Ant在内部将此扩大为一个绝对路径。
● refid 是对当前构建文件中某处定义的一个path的引用。
● path默示一个文件或路径名列表。
示例
<path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
</path>
&#160;
<path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src//.java"/>
</fileset>
</path>
&#160;
八、ant编译打包、运行
<?xml version="1.0" encoding="UTF-8"?>
<!-- name是当前的名称,default是默认履行的任务,basedir是工作目次(.代表当前根目次) -->
<project name="HelloWorld" default="run" basedir=".">
<!-- property类似于法度中定义简单的变量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!--
target是一个事务、工作、任务, name是当前工作的名称,depends是依附的上一件或是多件工作
若是所依附的工作没有履行,ant会先运行依附工作,然后再运行当前工作
-->
<!-- 初始化 -->
<target name="init">
<!-- 建树classes目次 -->
<mkdir dir="¥{dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="¥{src}" destdir="¥{dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
</target>
<!-- 建树jar包 -->
<target name="build" depends="compile">
<!--
<jar jarfile="¥{hello_jar}" basedir="¥{dest}"/>
创建一个名称是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="¥{hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加内容 -->
<manifest>
<attribute name="Built-By" value="¥{user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 复制jar文件 todir="复制到目次"-->
<copy file="¥{hello_jar}" tofile="¥{dest}\temp.jar"/>
<copy todir="temp">
<!-- 不遵守默认体式格式 defaultexcludes="" -->
<fileset dir="src">
<include name="/.java"/>
</fileset>
</copy>
<copy todir="temp2">
<fileset dir="src">
<and>
<contains text="main"/>
<size value="1" when="more"/>
</and>
</fileset>
</copy>
<!-- 移动jar文件 -->
<move file="¥{dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 创建zip -->
<zip basedir="¥{basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\\.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--调换input.txt内容中的old为new
<replace file="input.txt" token="old" value="new"/>
-->
</target>
<!-- 运行 -->
<target name="run" depends="build">
<java classname="com.hoo.test.HelloWorld" classpath="¥{hello_jar}"/>
</target>
<!-- 清除 -->
<target name="clean">
<!-- 删除生成的文件 -->
< dir="¥{dest}"/>
< file="¥{hello_jar}"/>
</target>
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
<!-- 从头运行 -->
<target name="rerun" depends="clean,run">
<echo message="###¥{TSP}#¥{TODAY}#¥{DSP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
</project>
要说的的器材根蒂根基上就那么多,ant还有很多内容没有提到,有爱好的可以本身去研究研究。ant不难,你用它就像是在docs把握台输入号令行一样,只不过ant是将号令行转换为xml的脚本信息,可以进行反复的运行。在必然景象下,进步了效力和反复的工作。
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
一、概述
ant 是一个将软件编译、测试、安排等步调接洽在一路加以主动化的一个对象,大多用于Java景象中的软件开辟。在实际软件开辟中,有很多处所可以用到ant。
&#160;
开辟景象:
System:Windows
JDK:1.6+
IDE:eclipse
ant:1.9.1
&#160;
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
http://hoojo.cnblogs.com/
&#160;
二、长处
ant 是Apache软件基金会JAKARTA目次中的一个子项目,它有以下的长处:
1、跨平台性:Ant是纯Java说话编写的,所以具有很好的跨平台性。
2、操纵简单:Ant是由一个内置任务和可选任务构成的,用ant任务就像是在dos中写号令行一样。Ant运行时须要一个XML文件(构建文件)。 Ant经由过程调用target树,就可以履行各类task。每个task实现了特定接口对象。
3、保护简单、可读性好、集成简单:因为Ant构建文件 时XML格局的文件,所以很轻易保护和书写,并且布局很清楚。Ant可以集成到开辟景象中。因为Ant的跨平台性和操纵简单的特点,它很轻易集成到一些开辟景象中去。
&#160;
三、安装和设备
1、ant,http://mirror.esocc.com/apache//ant/binaries/apache-ant-1.9.1-bin.zip
2、解压zip紧缩包,将紧缩包放置你要放置的目次。我这里放置在D:\apache-ant-1.9.1,目次布局如下:
bin是ant的法度运行进口,若是没有设备ANT_HOME的景象下,可以经由过程bin目次中的bat法度进交运行build任务。
如:在cmd中运行ant.bat就可以履行法度,当然你选择要当前目次中存在一个build.xml(build.xml是默认的ant履行文件,当然你可以指定其他文件)
etc目次中存放的都是一些xsl的输出模板,创建一个加强的导出各类任务的XML输出,使你的build文件摆脱过期的警告
lib目次中存放的是ant法度须要依附的jar包
manual目次是ant法度的帮助文档
3、在我的电脑 –> 右键属性 –> 高等体系设备 -> 景象变量 中设备ant
新建体系变量 ANT_HOME = D:\apache-ant-1.9.1
如许景象变量就设备好了,但前提你须要设备jdk的景象变量。若是你没有设备jdk的景象变量,那么请你先设备好jdk变量。jdk景象设备办法如下:
(1),安装JDk到其默认目次:C:\Program Files\Java\jdk1.5.0_05 (没有jdk去官方一个)
C:\Program Files\Java\jdk1.5.0
感化:告诉体系JVM在什么处所(2),右击我的电脑,选属性,高等,景象变量
(3),在体系变量栏点新建,呈现新建体系变量对话框,在变量名中填上JAVA_HOME ,变量值:C:\Program Files\Java\jdk1.5.0_05
(4),断定后在体系变量(S)栏再新建一个景象变量CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(开首的dot和;不克不及少)
(5),断定后在体系变量(S)栏查找并选中变量为Path的选项,点编辑在变量值(V)的末尾添加:
%JAVA_HOME%\bin&#160;&#160;&#160;&#160;&#160;若是没有找到PATH变量,本身新建一个!
若是你不想每次运行都要cmd到class地点目次然后履行java号令,可以把所有的class文件放到同一的目次组织下,然后将此目次也追加到CLASSPATH下。测试代码如下:
public class Test {
&#160;&#160;&#160; public static void main(String[] args) {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println("Hello World!");
&#160;&#160;&#160; }
}用记事本编辑后存为Test.java(文件名与类名雷同)文件,打开号令行窗口,
cd到文件地点目次下:
javac Test.java&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //编译号令
java Test&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //履行法度
若是输出为:Hello World!&#160;&#160;&#160;&#160;&#160;&#160; OK,设备完毕,不然,从头搜检。
&#160;
四、测试ant
在启动,运行cmd的dos窗口中输入ant,如图:
若是呈现这个,那么恭喜你安装成功了!不然就失败了,搜检下前面的步调有没有错误。上方号令会履行ant法度,ant默认履行build.xml中的任务,这里在Administrator目次中没有这个文件。
若是安装失败,你看看是否存在一些景象:
1、没有设备JAVA_HOME 或设备错误,并且JAVA_HOME\bin\java.exe存在
2、没有设备ANT_HOEM 或设备错误,并且ANT_HOME\bin\ant.bat存在
3、搜检你的景象变量的path变量中,有木有设备...;%ANT_HOME%\bin;...
%PATH%=...maybe-other-entries...;%ANT_HOME%\bin;...maybe-other-entries...
&#160;
五、ant的运行时景象
ant在运行号令的时辰,有时辰会呈现一些公园的jar库。这些库会存在于每个ant中,那么这个时辰我们可以把这个jar包放到ant_home\lib目次中作为全局的库应用。
若是你不想“污染”原始的ant法度,那么你可以把jar包放在当前windows用户的目次下,具体地位应当是¥{user.home}/.ant/lib 下。没有以上目次可以手动建树。
若是你只是姑且要添加lib,又不想把lib添加到当前ant中。你可以在运行ant法度的时辰指定依附的lib参数。
同时,你还可以在当前build的classpath目次中添加你的依附jar包。
六、ant号令
语法元素申明如下:
-help
显示描述ant 号令及其选项的帮助信息
-projecthelp
显示包含在构建文件中的、所有效户编写的帮助文档。即为各个<target>中description 属性的文本,以及包含在<description>元素中的任何文本。将有description 属性的目标列为主目标(Main target),没有此属性的目标则列为子目标(Subtarget)。
-version
请求ant 显示其版本信息,然撤退猬缩出。
-quiet
按捺并非由构建文件中的echo 任务所产生的大多半消息。
-verbose
显示构建过程中每个操纵的具体消息。此选项与-debug 选项只能选其一。
-debug
显示Ant 和任务开辟人员已经标记为调试消息的消息。此选项与-verbose 只能选其一。
-emacs
对日记消息进行格局化,使它们可以或许很轻易地由Emacs 的shell 模式(shellmode)所解析;也就是说,打印任务事务,但并不缩排,在其之前也没有[taskname]。
-logfile filename
将日记输出重定向到指定文件。
-logger classname
指定一个类来处理惩罚Ant 的日记记录。所指定的类必须实现了org.apache.tools.ant.BuildLogger 接口。
-listener classname
为Ant 声明一个类,并增长到其者列表中。在Ant与IDE或其他Java法度集成时,此选项很是有效。可以浏览第六章以懂得有关者的更多信息。必须将所指定的类编写为可以处理惩罚Ant 的构建消息接发。
-buildfile filename
指定Ant 须要处理惩罚的构建文件。默认的构建文件为build.xml。
-Dproperty=value
在号令行上定义一个特点名-值对。
-find filename
指定Ant 该当处理惩罚的构建文件。与-buildfile 选项不合,若是所指定文件在当前目次中未找到,-find 就请求Ant 在其父目次中再进行搜刮。这种搜刮会持续在其祖先目次中进行,直至达到文件体系的根为止,在此若是文件还未找到,则构建失败。
-atuoproxy jdk1.5以上的可以应用设置
-nouserlib 运行ant时不应用用户lib中的jar包
-nice 设计主线程优先级
-logfile 应用指定的log日记
-noinput 不容许交互输入
-keep-going, -k 履行不依附于所有目标
-propertyfile 加载所有属性设备文件 -d 属性文件优先<project default="all">
<property name="pro_a" value="a value" />
<property name="pro_b" value="b value" />
<path id="rt.path">
<pathelement location="¥{java.home}/jre/lib/rt.jar" />
</path>
<target name="all">
<javac srcdir=".">
<classpath refid="a.path" />
</javac>
</target>
</project>
重视:
● 所有构建文件都要有<project>元素,并且至少有一个<target> 元素。
● 对于<project> 元素的default 属性并不必然须要默认值。
● 构建文件并不必然要被定名为build.xml。不过build.xml 是ant 要搜刮的默认文件名。
● 每个构建文件只能有一个<project> 元素。
在cmd窗口中进入到当前build.xml目次
ant
在当前目次下的build.xml运行Ant,履行缺省的target。
ant -buildfile build-test.xml
在当前目次下的build-test.xml运行Ant,履行缺省的target。
ant -buildfile build-test.xml clean
在当前目次下的build-test.xml运行Ant,履行一个叫做clean的target。
ant -buildfile build-test.xml -Dbuild=build/classes clean
在当前目次下的build-test.xml运行Ant,履行一个叫做clean的target,并设定build属性的值为build/classes。
七、ant脚本:应用节点、元素和属性、号令指令
1、project 节点元素
project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应当包含一个 project 元素,不然会产生错误。在每个 project 元素下,可包含多个 target 元素。接下来向读者显现一下 project 元素的各属性。
● name 属性:用于指定 project 元素的名称。
● default 属性:用于指定 project 默认履行时所履行的 target 的名称。
● basedir 属性:用于指定基路径的地位。该属性没有指按时,应用 Ant 的构件文件的附目次作为基准目次。
<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
<target name="print-dir">
<echo message="The base dir is: ¥{basedir}" />
</target>
</project>
从上例可以看出,在这里定义了default 属性的值为print-dir,即当运行ant 号令时,若是没有指明履行的target,则将履行默认的target(print-dir)。此外,还定义了basedir 属性的值为 “.” ,.默示当前目次,进入当前目次后运行ant 号令,得一下成果:
&#160;
2、target节点元素
target为ant的根蒂根基履行单位或是任务,它可以包含一个或多个具体的单位/任务。多个target 可以存在彼此依附关系。它有如部属性:
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是独一的。我们可以经由过程指定 target 元素的名称来指定某个 target 。
● depends 属性:用于描述 target 之间的依附关系,若与多个 target 存在依附关系时,须要以“,”间隔。 Ant 会遵守 depends 属性中 target 呈现的次序依次履行每个 target ,被依附的target 会先履行。
● if 属性:用于验证指定的属性是存在,若不存在,地点 target 将不会被履行。
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,地点 target 将会被履行。
● description 属性:该属性是关于 target 功能的简短描述和申明。
示例:
<?xml version="1.0" ?>
<project name="ant-target" default="print">
<target name="version" if="ant.java.version">
<echo message="Java Version: ¥{ant.java.version}" />
</target>
<target name="print" depends="version" unless="docs">
<description>
a depend example!
</description>
<echo message="The base dir is: ¥{basedir}" />
</target>
</project>
从以下成果后可以看到,我们运行的是名为 print的target ,因为它依附于version这个target任务,所以 version将起首被履行,同时因为体系设备了JDK,所以 ant.java.version 属性存在,履行了version,输出信息:"[echo] Java Version: 1.6 ",version履行完毕后,接着履行 print,因为docs不存在,而unless属性是在不存在时进入地点target 的,由此可知 print得以履行,输出信息:"[echo] The base dir is:D:\Workspace\AntExample\build"。
&#160;
3、property属性节点元素
property元素可看作参量或者参数的定义,project 的属性可以经由过程 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以经由过程如下内容将其引:
<property file="build.properties"/>
property 元素可用作 task 的属性值。在 task 中是经由过程将属性名放在¥{属性名}之间,并放在 task 属性值的地位来实现的。
Ant 供给了一些内置的属性,它能获得的体系属性的列表与 Java 文档中 System.getProperties() 办法获得的属性一致,这些体系属性可参考 sun 网站的申明。同时, Ant 还供给了一些它本身的内置属性,如下:
basedir: project 基目次的绝对路径;&#160;&#160;
ant.file: buildfile的绝对路径,上例中ant.file值为D:\Workspace\AntExample\build;
ant.version: Ant 的版本信息,本文为1.8.1 ;
ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值;
ant.java.version: Ant 检测到的JDK版本,本文为 1.6 。
举例申明如下:
<project name="ant-project" default="example">
<property name="name" value="jojo" />
<property name="age" value="25" />
<target name="example">
<echo message="name: ¥{name}, age: ¥{age}" />
</target>
</project>
上例顶用户设置了名为name 和age的两个属性,这两个属性设置后,鄙人文中可以经由过程 ¥{name} 和 ¥{age} 分别取得这两个属性值。
4、copy号令
copy首要用来对文件和目次的复制功能。举例如下:
● 复制单个文件:
<copy file="old.txt" tofile="new.txt"/>
● 对文件目次进行复制:
<copy todir="../dest_dir">
&#160;&#160;&#160; <fileset dir="src_dir"/>
</copy>
● 将文件复制到别的的目次:
<copy file="src.txt" todir="c:/base"/>
5、号令
对文件或目次进行删除,举例如下:
● 删除某个文件:&#160;&#160;&#160;
< file="/res/image/cat.jpg"/>
● 删除某个目次:&#160;&#160;&#160;
< dir="/res/image"/>
● 删除所有的jar文件或空目次:
< includeEmptyDirs="true">
&#160;&#160;&#160;&#160;&#160;&#160; <fileset dir="." includes="/.jar"/>
</>
6、 mkdir 号令
创建目次。
<mkdir dir="/home/philander/build/classes"/>
7、 move 号令
移动文件或目次,举例如下:
● 移动单个文件:
<move file="sourcefile" tofile=”destfile”/>
● 移动单个文件到另一个目次:
<move file="sourcefile" todir=”movedir”/>
● 移动某个目次到另一个目次:
<move todir="newdir">
&#160;&#160;&#160; <fileset dir="olddir"/>
</move>
8、echo 号令
该任务的感化是按照日记或监控器的级别输出信息。它包含 message 、 file 、 append 和 level 四个属性,举例如下
<echo message="ant message" file="/logs/ant.log" append="true">
9、jar 标签节点元素
该标签用来生成一个JAR文件,其属性如下。
● destfile默示JAR文件名。
● basedir默示被归档的文件名。
● includes默示别归档的文件模式。
● exchudes默示被打消的文件模式。
● compress默示是否紧缩。
示例:
<jar destfile="¥{webRoot}/¥{ash_jar}" level="9" compress="true" encoding="utf-8" basedir="¥{dest}">
<manifest>
<attribute name="Implementation-Version" value="Version: 2.2"/>
</manifest>
</jar>
上方的mainfest是jar包中的MEAT-INF中的MANIFEST.MF中的文件内容
同样打包操纵的的还有war、tgz,已经解压操纵uzip
<!-- 创建zip -->
<zip basedir="¥{basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\\.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!-- 建树war包 -->
<war destfile="¥{webRoot}/ash.war" basedir="¥{basedir}/web" webxml="¥{basedir}/web/WEB-INF/web.xml">
<exclude name="WEB-INF/classes/"/>
<exclude name="WEB-INF/lib/"/>
<exclude name="WEB-INF/work/_jsp/"/>
<lib dir="¥{lib.dir}" includes="/.jar, /.so, /.dll">
<exclude name="¥{webRoot}\¥{helloworld_jar}"/>
</lib>
<lib file="¥{webRoot}/¥{helloworld_jar}"/>
<classes dir="¥{dest}" includes="/.xml, /.properites, /.xsd"> </classes>
</war>
10、javac 标签节点元素
该标签用于编译一个或一组java文件,其属性如下。
● srcdir默示源法度的目次。
● destdir默示class文件的输出目次。
● include默示被编译的文件的模式。
● excludes默示被打消的文件的模式。
● classpath默示所应用的类路径。
● debug默示包含的调试信息。
● optimize默示是否应用优化。
● verbose 默示供给具体的输出信息。
● fileonerror默示当碰着错误就主动停止。
示例
<javac srcdir="¥{src}" destdir="¥{dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
11、java 标签节点元素
该标签用来履行编译生成的.class文件,其属性如下。
● classname 默示将履行的类名。
● jar默示包含该类的JAR文件名。
● classpath所默示用到的类路径。
● fork默示在一个新的虚拟机中运行该类。
● failonerror默示当呈现错误时主动停止。
● output 默示输出文件。
● append默示追加或者覆盖默认文件。
示例
<java classname="com.hoo.test.HelloWorld" classpath="¥{hello_jar}"/>
12、arg 数据参数元素
由Ant构建文件调用的法度,可以经由过程<arg>元素向其传递号令行参数,如apply,exec和java任务均可接管嵌套<arg>元素,可认为各自的过程调用指定参数。以下是<arg>的所有属性。
● values 是一个号令参数。若是参数中有空格,但又想将它作为零丁一个值,则应用此属性。
● file 默示一个参数的文件名。在构建文件中,此文件名相对于当前的工作目次。
● line 默示用空格分隔的多个参数列表。
● 默示路径,一个作为单个号令行变量的path-like的字符串;或作为分隔符,Ant会将其改变为特定平台的分隔符。
● pathref 引用的path(应用path元素节点定义path)的id
● prefix 前缀
● suffix 后缀
例子
<arg value="-l -a"/>
是一个含有空格的单个的号令行变量。
<arg line="-l -a"/>
是两个空格分隔的号令行变量。
<arg path="/dir;/dir2:\dir3"/>
是一个号令行变量,其值在DOS体系上为\dir;\dir2;\dir3;在Unix体系上为/dir:/dir2:/dir3 。
13、ervironment 类型
由Ant构建文件调用的外部号令或法度,<env>元素制订了哪些景象变量要传递给正在履行的体系号令,<env>元素可以接管以部属性。
● file默示景象变量值的文件名。此文件名要被转换位一个绝对路径。
● path默示景象变量的路径。Ant会将它转换为一个本地商定。
● value 默示景象变量的一个直接变量。
● key 默示景象变量名。
重视 file path 或 value只能取一个。
14、filelist 文件凑集列表
filelist 是一个支撑定名的文件列表的数据类型,包含在一个filelist类型中的文件不必然是存在的文件。以下是其所有的属性。
● dir是用于策画绝对文件名的目次。
● files 是用逗号分隔的文件名列表。
● refid 是对某处定义的一个<filelist>的引用。
重视 dir 和 files 都是须要的,除非指定了refid(这种景象下,dir和files都不容许应用)。
示例
<filelist id="docfiles" dir="¥{doc.src}" files="foo.xml,bar.xml"/>
文件凑集 ¥{doc.src}/foo.xml和¥{doc.src}/bar.xml. 这些文件也许还是不存在的文件.
<filelist id="docfiles" dir="¥{doc.src}" files="foo.xml bar.xml"/>
&#160;
<filelist refid="docfiles"/>
&#160;
<filelist id="docfiles" dir="¥{doc.src}">
<file name="foo.xml"/>
<file name="bar.xml"/>
</filelist>
15、fileset 文件类型
fileset 数据类型定义了一组文件,并凡是默示为<fileset>元素。不过,很多ant任务构建成了隐式的fileset,这申明他们支撑所有的fileset属性和嵌套元素。以下为fileset 的属性列表。
● dir默示fileset 的基目次。
● casesensitive的值若是为false,那么匹配文件名时,fileset不是区分大小写的,其默认值为true.
● defaultexcludes 用来断定是否应用默认的打消模式,默认为true。
● excludes 是用逗号分隔的须要派出的文件模式列表。
● excludesfile 默示每行包含一个打消模式的文件的文件名。
● includes 是用逗号分隔的,须要包含的文件模式列表。
● includesfile 默示每行包含一个包含模式的文件名。
示例
<fileset id="lib.runtime" dir="¥{lib.path}/runtime">
<include name="/.jar"/>
<include name="/.so"/>
<include name="/.dll"/>
</fileset>
&#160;
<fileset id="lib.container" dir="¥{lib.path}/container">
<include name="/.jar"/>
</fileset>
&#160;
<fileset id="lib.extras" dir="¥{lib.path}">
<include name="test//.jar"/>
</fileset>
16、patternset 类型
fileset 是对文件的分组,而patternset是对模式的分组,他们是慎密相干的概念。
<patternset>支撑4个属性:includes、excludex、includexfile、excludesfile,这些与fileset雷同。
patternset 还容许以下嵌套元素:include,exclude,includefile 和 excludesfile.
示例
<!-- 曲直短长 -->
<patternset id="non.test.sources">
<include name="/.java"/>
<!-- 文件名包含Test的打消 -->
<exclude name="/Test"/>
</patternset>
&#160;
&#160;
<patternset id="sources">
<include name="std//.java"/>
<!-- 断定前提 存在professional就引入 -->
<include name="prof//.java" if="professional"/>
<exclude name="/Test"/>
</patternset>
&#160;
<!-- 一组文件 -->
<patternset includesfile="some-file"/>
<patternset>
<includesfile name="some-file"/>
<patternset/>
&#160;
<patternset>
<includesfile name="some-file"/>
<includesfile name="¥{some-other-file}" if="some-other-file"/>
<patternset/>
17、filterset 类型
filterset定义了一组过滤器,这些过滤器将在文件移动或复制时完成文件的文本调换。
首要属性如下:
● begintoken 默示嵌套过滤器所搜刮的记号,这是标识其开端的字符串。
● endtoken 默示嵌套过滤器所搜刮的记号这是标识其停止的字符串。
● id 是过滤器的独一标记符。
● refid 是对构建文件中某处定义一个过滤器的引用。
示例
<!-- 将目标文件build.dir目次中的version.txt文件内容中的@DATE@调换成TODAY当前日期的值,并把调换后的文件存放在dist.dir目次中 -->
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<filterset>
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
</copy>
&#160;
<!-- 自定义变量的格局 -->
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<!-- 从version.txt中的%地位开端搜刮,到地位停止,进行调换内容中的@DATE@调换成TODAY当前日期的值-->
<filterset begintoken="%" endtoken="">
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
</copy>
&#160;
<!-- 应用外部的过滤定义文件 -->
<copy toDir="¥{dist.dir}/docs">
<fileset dir="¥{build.dir}/docs">
<include name="/.html">
</fileset>
<filterset begintoken="%" endtoken="">
<!-- 过来文件从外部引入,过来的属性和值设备在dist.properties文件中 -->
<filtersfile file="¥{user.dir}/dist.properties"/>
</filterset>
</copy>
&#160;
<!-- 应用引用体式格式,反复哄骗过滤集 -->
<filterset id="myFilterSet" begintoken="%" endtoken="">
<filter token="DATE" value="¥{TODAY}"/>
</filterset>
&#160;
<copy file="¥{build.dir}/version.txt" toFile="¥{dist.dir}/version.txt">
<filterset refid="myFilterSet"/>
</copy>
18、path类型
path元素用来默示一个类路径,不过它还可以用于默示其他的路径。在用作几个属性时,路经中的各项用分号或冒号隔开。在构建的时辰,此分隔符将庖代当前平台中所有的路径分隔符,其拥有的属性如下。
● location 默示一个文件或目次。Ant在内部将此扩大为一个绝对路径。
● refid 是对当前构建文件中某处定义的一个path的引用。
● path默示一个文件或路径名列表。
示例
<path id="buildpath">
<fileset refid="lib.runtime"/>
<fileset refid="lib.container"/>
<fileset refid="lib.extras"/>
</path>
&#160;
<path id="src.paths">
<fileset id="srcs" dir=".">
<include name="src//.java"/>
</fileset>
</path>
&#160;
八、ant编译打包、运行
<?xml version="1.0" encoding="UTF-8"?>
<!-- name是当前的名称,default是默认履行的任务,basedir是工作目次(.代表当前根目次) -->
<project name="HelloWorld" default="run" basedir=".">
<!-- property类似于法度中定义简单的变量 -->
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="helloWorld.jar"/>
<!--
target是一个事务、工作、任务, name是当前工作的名称,depends是依附的上一件或是多件工作
若是所依附的工作没有履行,ant会先运行依附工作,然后再运行当前工作
-->
<!-- 初始化 -->
<target name="init">
<!-- 建树classes目次 -->
<mkdir dir="¥{dest}"/>
<mkdir dir="temp"/>
<mkdir dir="temp2"/>
</target>
<!-- 编译 -->
<target name="compile" depends="init">
<javac srcdir="¥{src}" destdir="¥{dest}"/>
<!-- 设置jvm内存
<javac srcdir="src" fork="true"/>
<javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac"
memoryMaximumSize="128m"/>
-->
</target>
<!-- 建树jar包 -->
<target name="build" depends="compile">
<!--
<jar jarfile="¥{hello_jar}" basedir="¥{dest}"/>
创建一个名称是package.jar文件
<jar destfile="package.jar" basedir="classes"/>
-->
<jar destfile="¥{hello_jar}" basedir="classes">
<!-- 向jar包中的main文件中添加内容 -->
<manifest>
<attribute name="Built-By" value="¥{user.name}"/>
<attribute name="Main-class" value="package.Main"/>
</manifest>
</jar>
<!-- 复制jar文件 todir="复制到目次"-->
<copy file="¥{hello_jar}" tofile="¥{dest}\temp.jar"/>
<copy todir="temp">
<!-- 不遵守默认体式格式 defaultexcludes="" -->
<fileset dir="src">
<include name="/.java"/>
</fileset>
</copy>
<copy todir="temp2">
<fileset dir="src">
<and>
<contains text="main"/>
<size value="1" when="more"/>
</and>
</fileset>
</copy>
<!-- 移动jar文件 -->
<move file="¥{dest}\temp.jar" tofile="temp\move-temp.jar"/>
<!-- 创建zip -->
<zip basedir="¥{basedir}\classes" zipfile="temp\output.zip"/>
<!-- 创建tgz -->
<gzip src="classes\\.class" zipfile="output.class.gz"/>
<!-- 解压zip -->
<unzip src="output.class.gz" dest="extractDir"/>
<!--调换input.txt内容中的old为new
<replace file="input.txt" token="old" value="new"/>
-->
</target>
<!-- 运行 -->
<target name="run" depends="build">
<java classname="com.hoo.test.HelloWorld" classpath="¥{hello_jar}"/>
</target>
<!-- 清除 -->
<target name="clean">
<!-- 删除生成的文件 -->
< dir="¥{dest}"/>
< file="¥{hello_jar}"/>
</target>
<tstamp>
<format property="OFFSET_TIME"
pattern="HH:mm:ss"
offset="10" unit="minute"/>
</tstamp>
<!-- 从头运行 -->
<target name="rerun" depends="clean,run">
<echo message="###¥{TSP}#¥{TODAY}#¥{DSP}###"/>
<aunt target="clean"/>
<aunt target="run"/>
</target>
</project>
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
要说的的器材根蒂根基上就那么多,ant还有很多内容没有提到,有爱好的可以本身去研究研究。ant不难,你用它就像是在docs把握台输入号令行一样,只不过ant是将号令行转换为xml的脚本信息,可以进行反复的运行。在必然景象下,进步了效力和反复的工作。