这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装、验证安装、使用方法、使用实例、ant命令等内容,需要的朋友可以参考下

一、概述

ant 是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在实际软件开发中,有很多地方可以用到ant。

开发环境:

复制代码 代码如下:
System:Windows JDK:1.6+ IDE:eclipse ant:1.9.1

二、优点

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的脚本信息,可以进行重复的运行。在一定情况下,提高了效率和重复的工作。

ant使用指南详细入门教程的更多相关文章

  1. <转载>ant使用指南详细入门教程 http://www.jb51.net/article/67041.htm

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

  2. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  3. gulp详细入门教程(转载)

    本文转载自: gulp详细入门教程

  4. Docker最详细入门教程

    Docker原理.详细入门教程 https://blog.csdn.net/deng624796905/article/details/86493330 阮一峰Docker入门讲解 http://ww ...

  5. Kibana详细入门教程

    Kibana详细入门教程   目录 一.Kibana是什么 二.如何安装 三.如何加载自定义索引 四.如何搜索数据 五.如何切换中文 六.如何使用控制台 七.如何使用可视化 八.如何使用仪表盘 一.K ...

  6. ActiveMQ详细入门教程系列(一)

    一.什么是消息中间件 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下 ...

  7. ant design pro超详细入门教程

    1.Ant Design Pro 初了解 说到ant design pro,得先了解一下ant design是个什么东西?ant design蚂蚁金服基于react打造的一个服务于企业级产品的UI框架 ...

  8. 2020年秋季最新Python详细入门教程!全网最新最全

    1. import # -*- coding: utf-8 -*- ## 引入新的包 import turtle import pickle # 文件操作 import tensorflow as t ...

  9. 【建议收藏】Redis超详细入门教程大杂烩

    写在前边 Redis入门的整合篇.本篇也算是把2021年redis留下来的坑填上去,重新整合了一翻,点击这里,回顾我的2020与2021~一名大二后台练习生 NoSQL NoSQL(NoSQL = N ...

随机推荐

  1. 清北国庆day1 (脑)残

    (留坑) /* 不知道为什要找的循环节TM这么长 */ #include<cstdio> #include<cstdlib> #include<cstring> u ...

  2. STM32F103xx bxCAN(Basic Extended CAN) 滤波机制

    一.背景 最近一个项目需要使用STM32F103xx实现CAN通信,而CAN总线的消息滤波在各个MCU上有不同机制, 譬如,SJA1000为标识符位屏蔽滤波机制,NXP的LPC17xx系列为标识符列表 ...

  3. 如何编译Apache Hadoop2.6.0源代码

    如何编译Apache Hadoop2.6.0源代码 1.安装CentOS 我使用的是CentOS6.5,下载地址是http://mirror.neu.edu.cn/centos/6.5/isos/x8 ...

  4. Jquery简单瀑布流代码示例

    最近很多网站都采用瀑布流风格设计,感觉挺有个性的,比较合适做图片类型的网站,没事仿开心网做一个瀑布流示例. 需要用到Jquery,jquery.masonry.min.js <!DOCTYPE ...

  5. webpack 教程 那些事儿01-webpack是什么

    文章目录 1. 为什么引入webpack? 2. webpack到底是什么? 3. webpack的工作流程理念 4. webpack的使用 4.1. install webpack 5. 分享源码d ...

  6. xcode免证书开发

    工程和target的code sign 选择 ios developer 工程的team选择为none就ok 推送测试 或者 正式发布的时候要改回来, 有一个严重的缺陷, 就是打包出来的ipa程序有时 ...

  7. python 数据结构 初学时没太注意却发现很有用的点点滴滴

    1. list.extend(L) 将指定列表中的所有元素附加到另一个列表的末尾:相当于a[len(a):] = L. 2. list.pop([i]) 删除列表中指定位置的元素并返回它.如果未指定索 ...

  8. IntelliJ中的main函数和System.out.println()快捷键

    1.在IntelJ中和Eclipse中稍有不同,在Eclipse中,输入main再按Alt+/即可自动补全main函数,但是在IntellJ中则是输入psvm,选中即可 2.在方法体内部有for循环, ...

  9. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  10. linux回收站设计

    linux回收站设计 在windows下有一个很好的东西,那就是回收站,虽然有很多人批评它.linux不是没有回收站,很多桌面环境都可以看到是有回收站的. 这里是讨论如何设计一个回收站,而不是有没有的 ...