hoojo

学而不思则罔,思而不学则殆! 汇小川而成大河,滴水可以穿石,学习在于日积月累。...

ant 入门使用指南

一、概述

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 命令,得一下结果:

 

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"。

 

3、property属性节点元素

property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引:
<property file="build.properties"/>
property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。
Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下:
basedir: project 基目录的绝对路径;  
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">
    <fileset dir="src_dir"/>
</copy>

● 将文件复制到另外的目录:
<copy file="src.txt" todir="c:/base"/>

5、delete命令

对文件或目录进行删除,举例如下:

● 删除某个文件:   
<delete file="/res/image/cat.jpg"/>

● 删除某个目录:   
<delete dir="/res/image"/>

● 删除所有的jar文件或空目录:
<delete includeEmptyDirs="true">
       <fileset dir="." includes="**/*.jar"/>
</delete>

6、 mkdir 命令

创建目录。
<mkdir dir="/home/philander/build/classes"/>

7、 move 命令

移动文件或目录,举例如下:
● 移动单个文件:
<move file="sourcefile" tofile=”destfile”/>

● 移动单个文件到另一个目录:
<move file="sourcefile" todir=”movedir”/>

● 移动某个目录到另一个目录:
<move todir="newdir">
    <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"/> 
 
<filelist refid="docfiles"/> 
 
<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>
 
<fileset id="lib.container" dir="${lib.path}/container">
    <include name="**/*.jar"/>
</fileset>
 
<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>
 
 
<patternset id="sources">
  <include name="std/**/*.java"/>
  <!-- 判断条件 存在professional就引入 -->
  <include name="prof/**/*.java" if="professional"/>
  <exclude name="**/*Test*"/>
</patternset>
 
<!-- 一组文件 -->
<patternset includesfile="some-file"/>
<patternset>
  <includesfile name="some-file"/> 
<patternset/>
 
<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>
 
<!-- 自定义变量的格式 -->
<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>
 
<!-- 使用外部的过滤定义文件 -->
<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>
 
<!-- 使用引用方式,重复利用过滤集 -->
<filterset id="myFilterSet" begintoken="%" endtoken="*">
  <filter token="DATE" value="${TODAY}"/>
</filterset>
 
<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>
 
<path id="src.paths">
    <fileset id="srcs" dir=".">
        <include name="src/**/*.java"/>
    </fileset>
</path>

八、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">
        <!-- 删除生成的文件 -->
        <delete dir="${dest}"/>
        <delete 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="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
        <aunt target="clean"/>
        <aunt target="run"/>
    </target>
</project>

要说的的东西基本上就那么多,ant还有很多内容没有提到,有兴趣的可以自己去研究研究。ant不难,你用它就像是在docs控制台输入命令行一样,只不过ant是将命令行转换为xml的脚本信息,可以进行重复的运行。在一定情况下,提高了效率和重复的工作。

阅读更多
个人分类: JavaEE Others
所属专栏: OpenSource 框架
想对作者说点什么? 我来说一句

ANT使用指南ANT使用指南

2011年05月08日 407KB 下载

Ant使用指南

2007年09月05日 535KB 下载

ant入门书籍 ant使用指南

2010年03月08日 521KB 下载

ant使用指南.pdf

2011年08月18日 515KB 下载

ant使用指南

2007年11月27日 415KB 下载

Ant使用指南.pdf

2011年07月23日 472KB 下载

ant工具使用指南ant工具使用指南

2010年08月15日 1.66MB 下载

Ant基本使用指南, 好用

2009年06月24日 40KB 下载

Ant使用指南.rar

2009年11月21日 523KB 下载

Ant使用指南(适合初学者)

2009年03月09日 341KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭