读书人

第七章 第二节 Ant核心概念及标签运用

发布时间: 2013-07-30 12:05:31 作者: rapoo

第七章 第二节 Ant核心概念及标签使用(1)
<project name="HelloAnt" default="run" basedir="."></project>

?
??????? property:属性,一个property 有一个名称和一个值,Property 可以用于task 的属性值,通过${}来调用,类似于EL表达式。

<property name="src" value="src" />

?
??????? depends:每个工程包含若干个目标(target),目标可以依赖于其他的目标。

<target name="init" depends="clean">    <mkdir dir="${src}" /></target>

?
??????? task:目标包含一个或多个任务(task),一个task 是一段可执行的代码,"javac"就是一个典型的task。

<mkdir dir="${src}" />

?

?

??????? 下面是Ant一些常用标签的介绍,我用实例来讲解一下会更生动些:

?

??????? 1.<project>

<project name="HelloAnt" default="run" basedir=".">    <description>说明信息</description>    <property name="dest" value="classes" />    <target name="init" depends="clean">         ...    </target></project><!--default:表示默认的运行目标(target),这个属性是必须的basedir:表示项目的基准目录name:表示项目名description:表示项目的描述,可在<project>之间添加-->

?
??????? 每个构建文件都对应于一个项目,必须包含一个<project>元素,但是大型项目经常包含大量的子项目,每一个子项目都可以有自己的构建文件。

?

??????? 2.<target>

??????? 一个项目标签下可以有一个或多个target标签,target标签可以依赖于其他的target标签。例如,有一个target用于编译程序,另一个target用于生成可执行文件。在生成可执行文件之前必须先编译该文件,因此可执行文件的target依赖于编译程序的target。

<target name="init" depends="clean" description="初始化" id="init" if="xx" unless="xx"> Task...</target><!--name:表示名称,这个属性是必须的。depends:表示依赖的目标。id:id标识description:表示目标的描述,也可在<target>之间添加<description></description>。 if:表示仅当属性设置满足时才执行。 unless:表示当属性没有设置时才执行。 -->

?
??????? Ant的depends属性指定了target的执行顺序,Ant会依照depends属性中target出现顺序依次执行每个target。在执行之前,首先需要执行它所依赖的target。一个target只能被执行一次,即使有多个target依赖于它。if或unless属性用来判断是否执行该target。


??????? 3.<property>

<!-- 设置name,value键值对应属性 --><property name="dest" value="classes" /><!-- 设置classpath --><property classpath=""/><!-- 设置classpath引用 --><property classpathref=""/><!-- 读取文件中的属性配置 --><property file="xx.properties"/><!-- 读取网络位置上属性文件中的属性配置 --><property url="http://url/xx.properties"/><!-- 读取属性文件中的属性配置 --><property resource="xx.properties"/><!-- 读取环境变量 --><property environment="env"/><!-- 设置路径结构 --><property location="/usr/local/"/><!-- 指向task --><property taskname="init"/>

?
??????? property标签可以帮助我们设置一些经常用到的属性,类似于Java中的变量,这样我们可以在多个task中方便调用,下面是一个引用属性文件的实例。

??????? 假设项目根目录存在build.properties 属性文件,用于保存公共的属性,其内容为:

src = srcdest = classes

?
然后在build.xml 中引用此属性文件:

<property file="build.properties" /><property name="src" value="${src} " /><property name="dest" value="${dest} " />

?
我们可以通过<echo>${dest}</echo>输出相应信息测试是否载入成功。

<?xml version="1.0" encoding="UTF-8" ?><project name="HelloAnt" default="run" basedir=".">    <property file="build.properties" />    <property name="src" value="${src} " />    <property name="dest" value="${dest} " />    <target name="run">        <echo>${dest}</echo>    </target></project>

?


??????? 4.文件相关

??????? 1)<mkdir>
??????? 该标签用于创建一个目录,它有一个属性dir用来指定所创建的目录名

<mkdir dir=”${dir}”/>

?
??????? 创建了一个目录,${dir}是前面已经声明的property属性


??????? 2)<tempfile>
??????? 建立一个文件名称为temp.bak,后缀为.bak 的文件

<tempfile property="temp" destDir="build" suffix=".bak"/>

?


??????? 3)<rename>
??????? 重命名文件/文件夹

<rename src="hello.jar" dest="helloAnt.jar"/>

?
??????? 将hello.jar重命名为helloAnt.jar


??????? 4)<move>
??????? 移动文件/文件夹

<move todir="bin">    <fileset dir="${dest}">         <include name="**/*.class" />         <exclude name="**/*_temp.class" />    </fileset></move>

?
??????? 将${dest}目录下所有class文件移动到bin目录下,排除"_temp"结尾的class文件。

<?xml version="1.0" encoding="UTF-8" ?><project name="HelloAnt" default="run" basedir=".">    <property name="dest" value="classes" />    <target name="run">        <move todir="bin">            <fileset dir="${dest}">               <include name="**/*.class" />               <exclude name="**/*_temp.class" />            </fileset>        </move>    </target></project>

?

?

??????? 5)<copy>
??????? 复制文件/文件夹

<copy file="file1" tofile="file2"/>

?
??????? 将file1复制为file2

<copy file="file" todir="dir"/>

?
??????? 将file复制到dir中

<copy todir="src2">    <fileset dir="src">        <include name="**/*.java"/>        <exclude name="**/*_tepm.java"/>    </fileset></copy>或<copy todir="src2">    <fileset dir="src" excludes="**/*_temp.java" includes="**/*.java"/></copy>

?
??????? 将src下的java文件复制到src2目录下,同时排除"_temp"结尾的java文件,两种写法均可。

<copyfile src="file1" dest="file2" forceoverwrite="true" /><copydir src="${src}" dest="${dest}" includes="**/*.java" excludes="**/_temp.java" />

?
??????? 复制文件和文件夹,跟上面的功能是一样的。

<delete defaultexcludes="false">    <fileset dir="src" includes="**/*.svn"/></delete>

?
??????? 通常情况下,svn 文件默认是 excludes 的,所以这里要设置一下

<deltree dir="src"/>

?
??????? 删除src目录树,即所有子文件夹内容

?

??????? 6)<delete>
??????? 删除一个文件或一组文件

<delete file="file1"/>

?
??????? 删除file1文件

<delete dir="dir1"/>

?
??????? 删除dir1目录

<delete>    <fileset dir="dir1" includes="**/*.bak"/></delete>

?
??????? 删除dir1下所有bak文件

<delete includeEmptyDirs="true">    <fileset dir="dir1"/></delete>或<delete includeEmptyDirs="true">    <fileset dir="dir1" includes="**/*"/></delete>

?
??????? 删除dir1下所有文件

?

??????? 7)<touch>
??????? 主要是用于修改最后修改时间

<touch file="file1"/>

?
??????? 如果文件不存在,先创建文件,更改最后修改时间为当前系统时间

<touch file="myfile" datetime="11/11/2011 11:11 pm"/>

?
??????? 如果文件不存在,先创建文件,更改最后修改时间为11/11/2011 11:11 pm

<touch datetime="11/11/2011 11:11 pm">    <fileset dir="src" /></touch>

?
??????? 更改文件夹最后修改时间,文件夹需存在

?

??????? 5.输出信息
??????? 1)<echo>
??????? 用于打印/输出信息,类似于log4j的info方法。

<echo message="hello!"><echo message="${msg}"><echo>${msg}</echo><echo>hello!</echo>

?

??????? 以上四种方式均可以显示相应信息
<echo file="test.txt" message="hello Ant!"/>
??????? 将"hello Ant!"写入test.txt文件中<echoxml file="test.xml"><test></test></echoxml>??????? 将"<test></test>"这段xml代码写入test.xml文件中<echoproperties destfile="test.properties"><propertyset><propertyref prefix="java." /></propertyset></echoproperties>??????? 将所有"java."开头的属性写入到test.properties属性文件中<?xml version="1.0" encoding="UTF-8" ?><project name="HelloAnt" default="run" basedir="."><target name="run"><echo file="test.txt" message="hello Ant!" /><echoproperties destfile="test.properties"><propertyset><propertyref prefix="java." /></propertyset></echoproperties><echoxml file="test.xml"><test></test></echoxml></target></project>?<fail message="${err}" /><fail message="this is an error" /><fail>${err}</fail><fail>this is an error</fail>??????? 与echo类似,fail提供四种基本的错误输出方式,当然fail也可以加入类似if,unless等业务逻辑进行判断是否显示

读书人网 >编程

热点推荐