`
g21121
  • 浏览: 694691 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ant标签详解--基础操作

 
阅读更多

        Ant的一些核心概念:

        build.xml:构建文件是以XML 文件来描述的,默认构建文件名为build.xml。
        project:每个构建文件包含一个工程。

<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 = src
dest = 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>
 
        (2)<fail>
        用于显示错误信息,类似于log4j的error方法。
<fail message="${err}" />
<fail message="this is an error" />
<fail>${err}</fail>
<fail>this is an error</fail>
        与echo类似,fail提供四种基本的错误输出方式,当然fail也可以加入类似if,unless等业务逻辑进行判断是否显示。
        6.流程,判断
        (1)<condition>
        包括<and>,<or>,<not>等标签。
<condition property="isMacOsButNotMacOsX">
  <and>
    <os family="mac"/>
    <not>
    <os family="unix"/>
    </not>
  </and>
</condition>
 
        (2)<available>
        available 主要用于判断某个文件是否存在,并设置相应属性值。
        1)如果类存在,则设置属性classExisted 为true。
<available classname="com.test.Myclass" property="classExisted"/>
 
        2)如果文件存在则设置属性myJar 为true。
<property name="myJar" value="./lib/myJar.jar"/>
<available file="${myJar}" property="jarExisted"/>
 
        3)如果目录存在,则设置属性为true。
<available file="/home/g21121" type="dir" property="g21121Existed"/>
  
        4)如果在classpath 下发现文件则设置属性为true
<available property="have.extras" resource="extratasks.properties">
 <classpath>
  <pathelement location="/usr/local/ant/extra.jar" />
 </classpath>
</available>
 
        (3)if ... else
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="test" default="run">
	<property name="db.type" value="oracle" />
	<import file="properties.xml" />
	<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${ant-contrib.jar}" />
	<target name="run">
		<if>
			<equals "${db.type}" arg2="mysql" />
			<then>
				<echo message="The db is mysql" />
			</then>
			<else>
				<echo message="the db is oralce" />
			</else>
		</if>
	</target>
</project>
 
        7.其他标签
        (1)<classPath>和<path>
        比较好理解,设置classPath,引用path内容。
<classpath>
	<pathelement path="${classPath}"/>
	<pathelement location="lib/ant.jar"/>
</classpath>
<path id="classPath">
	<pathelement location="${dest}"/>
</path>
        (2)<replace>
        替换指定内容,value1替换成value2。
<replace file="configure.sh" value="defaultvalue" propertyFile="source/name.properties">
	<replacefilter token="value1"/>
	<replacefilter token="value1" value="value2"/>
	<replacefilter token="value1" property="property.key"/>
</replace>
 
        (3)<exec>
        执行系统程序,例如:cmd,svn,cvs等等。
<!-- 启动tomcat -->
<exec executable="./${tomcat.home}/bin/startup.sh" failonerror="false"></exec>  

<!-- 打开cmd执行abc.bat -->
<exec executable="cmd">
	<arg value="abc.bat"/>
</exec>
 
        (4)执行SQL
       
<sql driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" userid="root" password="123456" encoding="utf-8" src="user.sql" >
<classpath refid="classpath" />
insert into user values(xxx,xxx,xxx,xxx);
</sql>
        既可以在sql标签内容声明SQL语句,也可以通过src加载sql文件。
 
        (5)发送电子邮件
        不得不佩服Ant功能的强大,居然连电子邮件功能都集成了,这样在部署或部署失败之后可以向指定地址报告结果。
<mail mailhost="smtp.gmail.com" mailport="1025" subject="test">
	<from address="g21121@gmail.com" />
	<replyto address="g21121@gmail.com" />
	<to address="g21121@gmail.com" />
	<message>hello Ant! --from ant mail</message>
	<attachments>
		<fileset dir="dist">
			<include name="**/*.zip" />
		</fileset>
	</attachments>
</mail>
 
        (6)载入其他构件文件
<ant antfile="dir1/dir2/build.xml" />
<ant antfile="dir2/build.xml" dir="dir1" />
<ant antfile="build.xml" dir="dir1/dir2" />
        调用指定文件中的制定target:
<ant antfile="dir/build.xml" target="compile"/>
 
        (7)压缩,解压缩
        压缩,解压缩包括jar,war,ear,zip,tar等等常见压缩包格式。
        zip压缩:
<zip destfile="${dist}/test.zip" basedir="${dest}" includes="**/**/*.html" excludes="**/*_temp.html" />
        zip解压缩:
<unzip src="${dist}/test.zip" dest="${dest}">
	<patternset>
		<include name="/lib/ant.jar" />
	</patternset>
	<mapper type="flatten" />
</unzip>
        upnzip也可以解压缩war包。 
        tar压缩:
<tar destfile="${dist}/test.tar">
	<tarfileset dir="${src}" fullpath="/usr/local/src/" preserveLeadingSlashes="true">
		<include name="*.java" />
	</tarfileset>
</tar>
 
        tar解压缩:
<untar src="${dist}/test.tar" dest="${dest}" />
 
        EAR压缩:
        全称是EnterpriseArchiveFile,为J2EE应用程序创建的JAR文件是EAR文件(企业JAR文件)。
        包含内容:Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件,如图片、音频文件等;除了包含JAR、WAR以外,还包括EJB组件.
<ear destfile="${dist}/test.ear" appxml="resource/application.xml">
	<fileset dir="${dist}" includes="*.jar,*.war" />
</ear>
 
        (8)获取当前时间:
<!-- 获取当前时间 -->
<tstamp>
	<format property="backupTime" pattern="yyyyMMddHHmmss" locale="zh"/>
</tstamp>
        类似于Java的用法,这里我就不讲了。
        Ant的命令还有很多,这里只是讲了一部分,Ant的知识还需要不断的实践去获取与验证。
2
0
分享到:
评论

相关推荐

    ANT-build-xml文件详解

    【ANT-build.xml文件详解】 ANT-build.xml文件是Apache Ant构建工具的核心配置文件,它使用XML格式定义了构建项目的所有步骤和任务。Ant是Java社区广泛使用的自动化构建工具,它的主要优势在于跨平台性、易用性和...

    java-maven-apache-ant-zip-2.3-jar包依赖

    Java Maven Apache Ant Zip 2.3 Jar包依赖详解 在Java开发中,Maven和Apache Ant是两种广泛使用的构建工具,它们帮助开发者管理和构建项目。本文将深入探讨`com.ckfinder:apache-ant-zip:jar:2.3`这个特定的依赖,...

    ANT文件详解 ant介绍 ANT 命令

    ### ANT文件详解:深入理解ANT及其在项目构建中的应用 #### Ant的概念与起源 Ant,全称为Apache Ant,是一款开源的、跨平台的项目构建工具,最初由James Duncan Davidson开发,现归属于Apache软件基金会Jakarta...

    ant标签详解

    ### ant标签详解 #### 1. `&lt;project&gt;` 标签 `&lt;project&gt;` 标签是构建文件的基础,每一个构建文件都有一个对应的项目,并且此标签作为构建文件的根节点。`&lt;project&gt;` 标签支持多种属性: - **default**:指定构建...

    ANT-build.xml文件详解

    ### ANT-build.xml 文件详解 #### Ant 的概念及与 Make 的比较 Ant 是一款开源的 Java 构建工具,它的设计理念主要是解决 Make 工具在跨平台应用中存在的问题。对于熟悉 Linux 的用户而言,Make 命令作为一种项目...

    Ant build.xml详解

    Ant build.xml 详解 Ant 是一个基于 Java 语言的编译工具,它的主要功能是自动化项目的编译和构建过程。Ant 的出现是为了克服 make 和其他编译工具的缺陷,它具有跨平台性、操作简单、易于维护和书写、结构清晰等...

    ant build.xml文件详解

    Ant build.xml 文件详解 Ant 是一个项目管理工具,相比make命令,gnumake和nmake等编译工具,Ant克服了这些工具的缺陷。Ant 的优点包括跨平台性、操作简单、易于集成到开发环境中。Ant 的构建文件是 XML 格式的文件...

    Ant 配置文件详解

    Ant 使用`&lt;property&gt;`标签来定义属性,这些属性可以作为变量在配置文件中被引用。例如,定义一个`src.dir`属性来表示源代码目录: ```xml ``` 三、目标(Targets) 目标是Ant构建中的可执行单元,它们定义了特定...

    Ant简介(标签)

    #### 四、Ant的构建文件详解 - **&lt;project&gt; 标签**: - **default**:指定默认运行的目标(Target),是必须的属性。 - **basedir**:项目的基准目录,默认情况下为构建文件所在的目录。 - **name**:项目的名称...

    Ant详细配置总结

    #### 三、Ant常见任务与标签详解 1. **`&lt;javac&gt;`**:用于编译Java源文件。 ```xml ${src.dir}" destdir="${build.dir}"&gt; ${build.dir}"/&gt; ``` 2. **`&lt;java&gt;`**:用于执行Java类文件。 ```xml $...

    Ant 脚本详解

    Ant可以与其他版本控制系统如Git、SVN等集成,进行版本控制操作。 ### 使用Maven或Gradle替代Ant 虽然Ant在早期Java开发中广泛使用,但随着Maven和Gradle的出现,它们凭借更强大的功能和更简洁的配置逐渐取代了Ant...

    经典ant笔记.doc

    ### 经典Ant笔记知识点详解 #### 一、Ant简介及功能 - **定义与作用:** - Ant是一款开源的Java平台上的自动化构建工具,主要用于简化软件项目的构建过程,支持多种任务,如编译Java源代码、运行Java程序、复制...

    ant 详解

    ### Ant 详解 #### Ant 的概念 Ant 是一个开源的 Java 工具,主要用于构建、测试和部署 Java 应用...通过深入理解 Ant 的基本概念、构建文件结构及常用标签的使用方法,可以显著提高 Java 应用程序的构建效率和质量。

    ant实用实例 详细解析ant的用法

    ### ant实用实例 详细解析ant的用法 #### 一、Ant简介与基本概念 Apache Ant 是一个Java环境下的开源项目构建...这些实例不仅有助于理解Ant的基础用法,还能够帮助开发者快速上手Ant,并应用于实际项目的构建过程中。

    ant概念

    ### Ant概念详解 #### 一、Ant简介与背景 **Ant**是一款开源的Java构建工具,主要用于自动化构建Java应用程序。它的设计理念旨在简化构建过程并提高跨平台能力。Ant由Apache软件基金会开发,作为Jakarta项目的一...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    ant_学习笔记

    Ant中的任务(task)是执行特定构建操作的基本单位,可以分为三类: - **核心任务**:由Ant自身提供的基本任务,如编译、复制文件、压缩等。 - **可选任务**:来源于第三方的任务,通常需要下载额外的JAR文件才能...

    Ant使用指南

    - **快速入门**: 即使是没有Ant经验的新手也可以快速掌握基本操作。 ##### **1.3 可扩展性** - **自定义任务**: 开发者可以通过编写Java类来扩展Ant的功能,实现更复杂的构建逻辑。 - **社区支持**: Ant拥有活跃...

    ant_build_xml详解

    Ant的构建文件由`&lt;project&gt;`标签作为根元素,包含了项目的配置信息,包括默认执行的目标、项目的基本目录、项目名称和描述。`&lt;project&gt;`标签的关键属性包括: 1. `default`: 指定构建时默认执行的目标。 2. `basedir...

    ant.jar最新包

    Ant.jar 最新包详解 Ant 是 Apache 软件基金会开发的一个开源项目,它是一个基于 Java 的构建工具,主要用于自动化软件项目的构建、编译、测试和部署过程。Ant 使用 XML 格式的构建文件(build.xml)来定义任务,...

Global site tag (gtag.js) - Google Analytics