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的脚本信息,可以进行反复的运行。在必然景象下,进步了效力和反复的工作。

    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: