ant脚本教程(一)

首先来看一个简单的Ant脚本,简单来说Ant就是帮你做了IDE平台该做的事情:编译软件、打包、执行测试、部署等。

有时候我们觉得代码工具很可怕,特别是那些需要编写代码又不是傻瓜式的工具。

但是当你发现其实只要自己买一个烤箱,按照流程就可以自己在家里做蛋糕,甚至比那种工厂里大烤箱出来的蛋糕更鲜美,而又简单实用,那么花一点时间来学习一下又何乐而不为呢?

先来看个简单的Ant脚本和解释:

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="run-Test" basedir=".">
       <property name="src" value="src"/>
       <property name="lib" value="build/lib"/>
       <property name="dest" value="build/classes"/>
       <property name="np_jar" value="build/lib/test.jar"/>
       <target name="create-path">
              <mkdir dir="${dest}"/>
              <mkdir dir="${lib}"/>
       </target>
       <target name="create-class">
              <javac srcdir="${src}" destdir="${dest}"/>
       </target>
       <target name="create-jar">
              <jar destfile="${np_jar}" basedir="${dest}">
                 <manifest>
                       <attribute name="Main-Class" value="Test"/>
                 </manifest>
              </jar>
       </target>
       <target name="run-Test">
              <java classname="Test" classpath="${np_jar}"/>
       </target>
       <target name="clean">
              <delete file="${np_jar}"/>
              <delete dir="${dest}"/>
              <delete dir="${lib}"/>
       </target>
</project>

代码说明:

aAnt脚本使用XML描述,其中project标签是根标签,该标签中name属性用于注明工程名称,default属性用于指定默认启动的target(即当在DOS中只输入ant并回车时所执行的命令),basedir属性用于注明工程根目录(“.”代表当前目录);

bproperty标签用于在本xml文件中定义属性及属性值,其中name属性定义属性名而value定义相应的属性值,所定义的属性在整个XML文档中都可以通过"${属性名}" 来调用;

ctarget标签用于定义ant相应的任务:create-path---初始化,创建目录,为后面的构建工作做准备;create-class---编译,生成class文件;create-jar---生成jar文件;run-Test---执行指定的Java类;clean---清除构建动作生成的文件及目录,这些任务可以通过“ant target标签中name属性值进行调用。

现在整理知识:

扫描二维码关注公众号,回复: 3827411 查看本文章

一、概述

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

二、优点

ant 是Apache软件基金会JAKARTA目录中的一个子项目,它有以下的优点: 
1、跨平台性:Ant是纯Java语言编写的,所以具有很好的跨平台性。 
2、操作简单:Ant是由一个内置任务和可选任务组成的,用ant任务就像是在dos中写命令行一样。Ant运行时需要一个XML文件(构建文件)。 Ant通过调用target树,就可以执行各种task。每个task实现了特定接口对象。 
3、维护简单、可读性好、集成简单:由于Ant构建文件 时XML格式的文件,所以很容易维护和书写,而且结构很清晰。Ant可以集成到开发环境中。由于Ant的跨平台性和操作简单的特点,它很容易集成到一些开发环境中去。

三、安装和配置

1、在Windows操作系统中搭建Apache Ant环境

2、解压zip压缩包,将压缩包放置你要放置的目录。我这里放置在D:\Program Files\apache-ant-1.10.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程序的帮助文档

四、ant的运行时环境

1、ant在运行命令的时候,有时候会出现一些公共的jar库。这些库会存在于每个ant工程中,那么这个时候我们可以把这个jar包放到ant_home\lib目录中作为全局的库使用。

2、如果你不想“污染”原始的ant程序,那么你可以把jar包放在当前windows用户的目录下,具体位置应该是当前目录的/lib目录 下。没有lib目录则手动建立。

3、如果你只是临时要添加lib,又不想把lib添加到当前ant工程中。你可以在运行ant程序的时候指定依赖的lib参数。

例如:ant -lib helloWorld.jar -f build.xml

同时,你还可以在当前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 属性文件优先
-inputhandler  可以处理输入请求的类
-find   -s   查找build文件,并且使用它。
-nice 数字   主线程最好的值:1到10;默认是5
-nouserlib     不从lib目录中使用jar
-noclasspath 不使用CLASSPATH
-autoproxy    Java1.5以上:使用操作系统代理的设置
-main<class>  重写Ant的通用入口

注意: 

● 所有构建文件都要有<project>元素,而且至少有一个<target> 元素。 
● 对于<project> 元素的default 属性并不一定需要默认值。 
● 构建文件并不一定要被命名为build.xml。不过build.xml 是ant 要搜索的默认文件名。 
● 每个构建文件只能有一个<project> 元素。

七、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.8 " version 执行完毕后,接着执行  print ,因为 docs 不存在,而 unless 属性是在不存在时进入所在 target  的,由此可知  print 得以执行,输出信息: "[echo] The base dir is:D:\Workspace\AntExample\build"


<target name="compile" depends="init">
    <javac srcdir="${src}" destdir="${dest}" />
</target>

修改为

<target name="compile" depends="init">
    <javac srcdir="${src}" destdir="${dest}" includeantruntime="on" />
</target>

也就是添加 includeantruntime="on" 

猜你喜欢

转载自blog.csdn.net/jinhe123/article/details/70257209
今日推荐