zoukankan      html  css  js  c++  java
  • Ant的安装和使用

    一、安装ant

    到官方主页http://ant.apache.org下载新版(目前为Ant1.8.1)的ant,得到的是一个apache-ant-1.8.1-bin.zip的压缩包。将其解压到你的硬盘上,例如:C:\apache-ant-1.8.1。

    二、配置环境变量

    window中设置ant环境变量:

    ANT_HOME    C:/ apache-ant-1.8.1

    path             C:/ apache-ant-1.8.1/bin

    classpath      C:/apache-ant-1.8.1/lib

    注意:【
      配置环境变量:我的电脑----属性-----高级----环境变量
          如:ANT_HOME:C:\apache-ant-1.8.1
          PATH:%ANT_HOME%\bin (为了方便在dos环境下操作)
         实验了总是失败,没办法换成地址 C:/ apache-ant-1.8.1/bin,而不再使用变量。。。成功了。。

    三、验证ant

    为了验证ant是否成功安装,可以进行如下操作:

    依次选择:开始->运行->cmd,输入如下命令:ant

    如果出现如下内容,说明安装成功:

    Buildfile: build.xml does not exist!

    Build failed

    【说明ant安装成功!因为ant默认运行build.xml文件,这个文件需要我们建立。】

    查看版本:ant  -version

    但如果出现如下内容,说明安装失败:(可以重复前述步骤,直至安装成功。)

    'ant' 不是内部或外部命令,也不是可运行的程序或批处理文件。

    从别处移动过来的:

    使用:
    (1)在D盘根目录下建立build.xml

    1<?xml version="1.0" encoding="GBK"?>
    2<project name="测试脚本" default="copyfile" basedir="." >
    3   <target name="copyfile">
    4      <copy file="d:/a.txt" todir="e:/Temp" overwrite="true" />
    5   </target>
    6</project>


    (2)在D盘根目录下建立文件a.txt。
    (3)进入dos,
             d:
             ant
             
             此时可在E:/Temp目录下见到文件aa.txt,内容与a.txt一样,即拷贝成功!

    Ant工具的使用‘

    当Ant正确地安装后,只要输入ant或ant.bat即可。

    如果运行ant命令时没有制定任何参数,Ant会在当前目录下搜索buid.xml文件。如果找到了就以该文件作为生成

    如果运行时使用-find或者-s选项(这两个选项的作用完全相同),Ant就会到上级目录中搜索生成文件,直到到达系统的根路径。

    要想让Ant使用其他生成文件,可以用- buildfile<生成文件>选项,其中- buildfile可以使用

    -file或-f来代替,这三个选项的作用完全一样。例如如下命令:

    Ant -f a.xm1//显式指定使用a.xm1作为生成文件

    ant-fi1e b.xm1//显式指定使用b.xm1作为生成文件

    如果希望Ant运行时只输出少量的必要信息,则可使用- quiet或-q选项;如果希望Ant运行时输出更多的提示信息,则可使用-verbose或v选项。

    如果希望Ant运行时将提示信息输出到指定文件,而不是直援输出到控制台,则可使用

     -logfile <files> 或 -l<file>选项 例如如下命令

    ant- verbose -1 a.1og //运行Ant时生成更多的提示信息,并将提示信息输出到a.1og文件中

          除此之外,Ant还允许运行时指定一些属性来覆盖生成文件中指定的属性值(使用 Property task来指定),例如使用 -D<property>=<value>,则此处指定的 value将会覆盖生成文件中 property的属性值。

    例如如下命令

    Ant -Dbook=Spring4//该命令将会覆盖生成文件中的book属性值

    通过该方法可以将操作系统的环境变量值传入生成文件,例如在运行Ant工具时使用如下命令

    ant -Denv1=%ANT HOME%

    上面命令中的粗体字代码用于向生成文件中传入一个env1属性,而该属性的值并没有直接给出,而是用% ANT HOME%的形式给出—这是 Windows下访问环境变量的方式。通过这种方式,就可以将 Windows环境变量值传入生成文件了,如果希望在生成文件中访问到该环境变量的值,使$envl即可。

    上面命令在 Linux平台上则改为: ant -DenvI= $ANT_HOME, Linux下以$符来访问环境变量

           在默认情况下,Amt将运行生成文件里指定的默认 target,如果运行Ant时显式指定希望运行的target,则可采用如下命令格式:

    ant [target [target2 [target..]]

    实际上,如果读者需要获取ant命令的更多详细情况,直接使用ant-help选项即可。运行 ant-help

    将看到如图1.25所示的提示信息。

    argeta Target].13

    projecthelp, p

    print this message

    print project help Information

    -diagnostics

    le for log

    search for

    ich Is

    argets that

    >153定义生成文件

    实际上,使用Ant的关键就是编写生成文件,生成文件定义了该项目的各个生成任务(以 target表示,每个target表示一个生成任务),并定义生成任务之间的依赖关系。

           Ant生成文件的默认名为 build. xm,也可以取其他的名字。但如果为该生成文件起其他名字,将意味着要将这个文件名作为参数传给Ant工具。生成文件可以放在项目的任何位置,但通常做法是放在项目的顶层目录中,这样有利于保持项目的简洁和清晰。

           下面是一个典型的项目层次结构。

    <project>:该文件夹存放了整个项目的全部资源

           src:源文件、各种配置文件的文件夹

           classes::存放编译后的 class 文件的文件夹

           lib:存放第三方JAR包的文件夹

           dist:存放项目打包、项目发布文件的文件夹

           build.xml:Ant生成文件

    Ant生成文件的根元素是 <project…/>,每个项目下可以定义多个生成目标,每个生成目标以一个<target>元素来定义,它是<project>元素的子元素。

    project元素可以有多个属性, project元素的常见属性的含义如下。

    default:指定默认 target,,这个属性是必需的。如果运行 ant. bat命令时没有显式指定想执行的target,Ant将执行该target

    1>basedir:指定项目的基准路径,生成文件中的其他相对路径都是基于该路径的。

    2>name:指定项目名,该属性仅指定一个名字,对编译、生成项目没有太大的实际作用。

    3>description:指定项目的描述信息,对编译、生成项目没有太大的实际作用。

    例如,如下代码片段:

    <?xml version="1.0" encoding="GBK"?>

    <!-下面的配置信息指定基准路径是当前路径,默认 target为空-->

    <project name="struts2" description="demo" basedir="." default=">

    ….

    </project>

    每个生成目标对应一个<target…/>元素

    name:指定该 target的名称,该属性是必需的。该属性非常重要,当希望Ant运行指定的生成目标时,就是根据该name来确定生成目标的。因此可以得出一个结论:同一个生成文件里不能有两个同名的 target元素

    4>depends:该属性可指定一个或多个 target名,表示运行该 target之前应先运行该 depends属性所指定的一个或多个 target

    5>unless:该属性指定一个属性名,用属性表示仅当没有设置该属性时才执行此 target

    6>if:该属性指定一个属性名,用属性仅当设置了该属性时才执行此target

    > description:指定该 target的描述信息。

    例如,如下配置片段

    <!-下面表示执行 run target之前,必须先执行 compile target-->

    <target name="run" depends="compile"/>

    <!-只有当设置了prop1属性之后才会执行 exA target-->

    <target name="exA" if="prop1"/>

    <!--只要没有设置prop2属性,就可以执行exB target-->

    <target name="exB" unless="prop2" />

    每个生成目标又可能由一个或者多个任务序列组成

    每个生成目标又可能由一个或者多个任务序列组成,当执行某个生成目标时,实际上就是依次完成该目标所包含的全部任务。每个任务由一段可执行的代码组成。

    定义任务的代码格式如下:

    <name attribute1="valuel" attribute2=”value2”…./>

    上面代码中的name是任务的名称, attributeN和 valueN用于指定执行该任务所需的属性名和属性值。

    Ant的任务可以分为如下三类

    1.核心任务:核心任务是Ant自带的任务

    2.可选任务:可选任务是来自第三方的任务,因此需要一个附加的JAR文件

    3..用户自定义的任务:用户自定文的任务是用户自己开发任务。

    除此之外,<project…/>元素还可拥有如下两个重要的子元素

    1.<property…>用于定义一个或多个属性

    2.<path…/>:用于定义一个或多个文件和路径

    1. property元素

    <propert../>元素用于定义一个或多个属性,Ant生成文件中的属性类似于偏程语言中的宏变量

    具有名称和值,与编程语言不同的是,Ant生成文件中的属性值不可改变

    定义一个属性的最简单形式如下

           <!---下代定义了一个名为builddir的属性,其值为dd--->

           <property name=”builddir” value=”dd”/>

    如果需要获取属性值,则使用 ${propName}的形式。例如,如下代码即可获取 builddir属性值

           //输出bu1dlr属性值

           ${builddir}

    此可见$符在Ant生成文件中具有特殊意义如果希望Ant将生成文件中的$当成普通字符,则

    使用$$例如,如下配置片段

           <echo>$${builddir}=${builddir}</echo>

    上面代码中的 $${builddir}不会获取 buildin属性值,而${ building}.才会获取 buildin属性值,

    上面任务将会输出           [echo]   ${buiddir}=dd

    echo是Am的核心任务之一,该任务直接输出某个字符串,通常用于输出某些提示

    实际上, <property../>元素可以接受如下几个常用属性

    name指定需要设置的属性名

    value指定需要设置的属性值

    resourcer指定属性文件的资源名称,Ant将负责从属性文件中读取属性名和属性值,

    fie指定属性文件的文件名,Ant将负责从属性文件中读取属性名和属性值

    url指定属性文件的URL地址,Amt将负责从属性文件中读取属性名和属性值

    environment用于指定系统环境变量的前缀,通过这种方式允许Ant边问系统环境变量

    classpath 指定搜索属性文件的 classpath

    classpathref指定搜索属性文件的 classpath引用,该属性并不是直接给出 classpath值,而是引用<path../>元素定义的文件或路径集

    下面给出几个使用property元素的例子

           <!----制定读取foo.properties属性文件中的属性名和属性值---->

           <property file=”foo.properties”/>

    下面从网络中读取属性名和属性值

           <!—制定从URl处读取属性名和属性值-->

           <property url=”http://www.../foo.properties”/>

           properties素所读取的属性文件就是普通的属性文件,该文件的内容由一系列的name=vlaue组成,如下面的配置片段所示,

    wuther-Yeeku,HLee

    除此之外,通过 property元素可以让Ant生成文件访问到操作系统的环境变量值,例如如下代码

           <!--定义访同操作系统环变量的前是env-->

           <property environment=”env”/>

    定义了上面的 property元素之后,就可以在Ant生成文件中通过如下形式来访问操作系统环境变量

           <!---输出JAVA_HOME环境变量-->

           <echo>${env.JAVA_HOME}</echo>

    2.path元素和 classpath元素

    使用Amt编译,运行Java文件时常常需要引用第三方JAR包,这就需要使用<classpath../>元素了。

    <path../>元素和<classpath,./>元素都用于定义文件和路径集,区别是 classpath元素通常作为其他任务的子元素,既可引用已有的文件和路径集,也可临时定义一个文件和路径集,而path元素则作为project元素的子元素,用于定义一个独立的、有名称的文件和路径集,用于被引用。因为<path../>和<classpath,./>都用于定义文件和路径集,所以也将<path../>和<classpath,./>元素定义的内容称为 Path-like Structures(似目录结构)

    <path../>和<classpath,./>元素都用于收集系列的文件和路径集,这两个元素都可接受如下子元素

    < dirset../>:采用模式字符串的方式指定系列目录

    < fileset../>:采用模式字符串的方式指定系列文件

    < filelist.:/>采用直接列出系列文件名的方式指定系列文件

    <pathelement../>用于指定一个或多个目录 pathelement元素可以指定如下两个属性中的一个

    l  <path../>:指定一个或者多个目录(或者JAR文件),多个目录或JAR文件之间以英交冒号(:)或英文分号(:)分开

    l  < location,./>:指定一个目录和JAR文件

    例如,如下配置片段:

           <!---定义/path/to/file2.jar’:/path/to/class2;/path/to/class3所组成的路径集-->

           <pathelement path=” /path/to/file2.jar’、/path/to/class2和/path/to/class3”/>

           <!---定义由lib/helper.jar单个文件对应的目录-->

           <pathelement location=”lib/helper.jar”/>

    如果需要指定多个路径集。

    则应该使用<dirset>元素,该元素需要一个dir属性,dir属性指

    路径集的根路径,除此之外,dirset还可以使用<include../>和<exclude../>两个子元素来指定包含和不含哪些目求,例如下面的配置片段:

           <!--指定该路径集的根路径是build目录-->

           <dirset dir=”build”>

                  <!--指定创含 apps 目录下的所有classes目录-->

                  <include name=”apps/**/classes”/>

                  <!—指定排除目录名中有Test的目录-->

                  <exclude name=”apps/**/*Test*”/>

           <dirset/>

    如果希望配置多个文件,

    则可用<fileset../>,或者<filelist.,/>元素,通常< fileset../>使用模式字符串来匹配文件集,而<filelist.,/>则通过列出文件名的方式米指定文件集

    filelisT元素需要指定如下两个属性

    dir 指定文件集里多个文件所在的基准路径,这是一个必需的属性

    files:多个文件名列表,多个文件名之间以英文逗号(,)或空白隔开

    例如,下面的示例配置片段

           <!—配置src/foo.xml 和 src/bar.xml文件组成的文件集-->

           <filelist id=”docfiles” dir=”src” files=” src/foo.xml,src/bar.xml”>

    提示:

    几乎所有的Ant元素都可以指定两个属性:id和refid,其中id用于为该元素指一

    个唯一标识,而refid用于指定引用另一个元素,例如下面的 filelist配置

    <filelist refid=”docfiles”/>

    该filelist元素所包含的文件集和前面 docfiles文件集里包含的文件完全一样

    实际上,<filelist../>还允许使用多个<file../>子元素来指定文件列表,例如下面的配置片段:

    <filelist id=”docfiles” dir=”${doc.src}”>

           <!—通过两个file子元素指定的文件列表和通过files属性制定的效果完全一样-->

           <file name=”foo.xml”/>

           <file name=”bar.xml”/>

    <filelist/>

    <fileset…/>元素可指定如下两个属性

    dir:指定文件集里多个文件所在的基准路径。这是一个必需的属性

    casesensitve:指定是否区分大小写。默认区分大小写

    除此之外,< fileset,./>元素还可以使用<include../>和<exclude,./>两个子元素来指定包含和不包含哪

    些文件,例如下面的配置片段:

    <!-定义src路径下的文件集-->

           <fileset dir=”src” casesensitive=”yes”>

                  <!--包含所有的*java文件-->

                  <include name=“**/*.java“>

                  <!—排除所有的文件名中有test字串的文件-->

                  <exclude name=”**/*Test*”>

           </fileset>

    综合使用<pathelement../><dirset../><filelist../><fileset../><path../><classpath../>

    <path id=”classpath”>

           <!--定义classpath属性值所代表的路径-->

           <pathelement path=”${classpath}”/>

           <!—定义lib路径下的所有*.jar文件-->

           <fileset dir=”lib”>

                  <include name=”**/*.jar”/>

           </fileset>

           <!—定义classes路径-->

           <pathelement location=”classes”/>

                  <!—定义build/apps路径下的所有的classes路径-->

                  <dirset dir=”build”>

                         <include name=”apps/**/classes”>

                         <exclude name=”apps/**/*Test*”/>

                  <dirset/>

                  <!—定义res路径下的a.properties和b.xml文件-->

                  <filelist dir=”res” files=”a.properties,b.xml ”>

    </path>

    1.5.4Ant的任务(task)

    <target../>元素的横心就是task,即每个target由一个或多个task组成

    Amt提供了大量的核心k和可选ak,除此之外,A以连允许用户定义自己的如k,这大大扩展

    了Ant的功能

    简要介组一些常用的task

    javac:用于编译一个或多个加w源文件,通常需要srcdir和 destdir两个属性,用于指定java

    源文件的位置和编译后class文件的保存位置。

    java:用于运行某个Jawa类,通常需要 classname属性,用于指定需要运行哪个类

    jar用于生成JAR包,通常需要指定 destifile属性,用于指定所创建JAR包的文件名,除此之

    外,通常还应指定一个文件集,表明需要将哪些文件打包到JAR包里

    sql用于执行一条或多条SOL语句,通常需要driver,url:useid和 password等属性,用于指

    定连接数据库的驱动类、数据库URL用户名和密码等,还可以通过src来指定所需要的sou

    脚本文件,或者直接使用文本内容的方式指定SOL脚木字符

    夺串

    echo:输出某个字符串

    exec执行操作系统的特定命令,通常需要 executable属性,用于指定想执行的命令

    copy:用于复制文件或路径

    delete用于删除文件成路径

    mkdir:用于创建文件夹

    move:用户移动文件或路径

    ANT HOME%/manual/Tasks路径下包含了Ant所直ask的详细介绍,读者可以参考这些文档来.下面定义了一份简单的生成文件,这份生成文件里包含了编译Java文件,运行Java程序,生成JAR包等常用的 target,通过这份文件就可以非常方便地管理该项日

    <?xml version=”1.0” encoding=”GBK”?>

    <!—定义生成文件的project根元素,默认target为空-->

    <project name=”antQs” basedir=”.” Default=””>

           <!—定义三个简单属性-->

           <property name=”src” value=”classes”/>

           <property name=”classes” value=”classes”/>

           <property name=”dest” value=”dest”/>

           <!—定义一组文件和路径集-->

           <path id=”classpath”>

                  <pathelement path=”${classes}”/>

           <path/>

           <!—定义help target,用于输出该生成文件的帮助信息-->

           <target name=”help” description=”打印帮助信息”>

                  <echo>help – 打印帮助信息</echo>

                  <echo>compile – 编译Java源文件</echo>

                  <echo>run – 运行程序</echo>

                  <echo>build – 打包JAR包</echo>

                  <echo>clean – 清除所有编译生成的文件</echo>

           <target/>

           <!—定义compile target 用于编译java源文件-->

           <target name=”compile” description=”编译java源文件”>

                  <!—先删除classes属性所代表的文件-->

                  <delete dir=”${classes}”/>

                  <!--创建classes属性所代表的文件夹-->

            <mkdir dir=”${classes}”>

            <!—编译Java文件,编译后的class文件放到classes属性所代表的文件夹内-->

            <javac destdir=”${classes}” debug=”true” includeantruntime=”yes” deprecation=”false” optimize=”false” failonerror=”true”>

                   <!—指定需要编译的Java文件所在的位置-->

                   <src path=”${src}”/>

                   <!—指定编译Java文件所需要第三方类库所在位置-->

                   <classpath refid=”classpath”/>

            </javac>

           <target/>

           <!—定义runtarget,用于运行java源文件,运行该target之前会先运行compile target -->

           <target name=”run” description=”运行程序” depends=”compile”>

                         <!—运行lee.HelloTest类,其中fork指定启动另一个JVM来执行java命令-->

                  <java classname=”lee.HelloTest” fork=”yes” failonerror=”true”>

                         <classpath refid=”classpath”/>

                         <!—运行java程序时传入2个参数-->

                         <arg line=”测试参数 1 测试参数2”/>

                  <java/>

           <target/>

    <!---定义buildtarget 用于打包JAR文件,运行该target之前会先运行compile target-->

           <target name=”build” description=”打包JAR文件” depends=”compile”>

           <!—先删除dest属性所代表的文件夹-->

           <delegate dir=”${dest}”>

           <!—创建dest属性所代表的文件夹-->

           <mkdir dir=”${dest}”>

                  <!—指定将classes属性所带表的文件夹下的所有*.classes文件都打包到app.jar文件中-->

                  <jar destfile=”${dest}/app.jar” basedir=”${classes}” includes=”**/*.class”>

                         <!—为JAR包的清单文件添加属性-->

                         <manifest>

                                <attribute name=”Main-Class” value=”lee.HelloTest”/>

                         <manifest>

                  </jar>

           <target/>

    <!---定义clear target,用于删除所有编译生成的文件-->

           <target name=”clean” description=”清除所有编译生成的文件”>

                         <!—删除两个目录, 目录下的文件也一并删除-->

                         <delete dir=”${classes}”>

                         <delete dir=”${dest}”>

           <target/>

    <!----->

           <target>

           <target/>

    <!----->

           <target>

           <target/>

    </project>

    上面配置定义的生成文件里包含了5个 target,这些 target分别完成打印帮助信息、编译Java文件运行Java程序、打包JAR包和清除编译生成的文件。执行这些 target可使用如下命令。

    ant help:输出该生成文件的帮助信息。

    >ant compile:编译Java文件。

    ant run:运行 lee. Hello Test类

    ant build:将 classes路径下的所有 class x件打包成 app.jar,并放在dest目录下。

    ant clean:删除 classes和dest两个目录。

  • 相关阅读:
    nas存储服务器硬盘出现故障离线导致磁盘阵列失效、服务器无法访问的数据恢复案例
    【北亚vSAN数据恢复案例】异常断电导致vSAN底层数据损坏的数据恢复
    【Vsan数据恢复】供电不稳服务器非正常关机导致vsan架构中虚拟机磁盘文件丢失的数据恢复
    随机数
    字符串和数组截取.....某人可以看看这个,希望能帮到你,
    利用angular与后台的交互
    AngularJS 深入理解 $scope
    angular 后台交换实例
    alert()、confirm()和prompt()的区别与用法
    ReactJs入门教程
  • 原文地址:https://www.cnblogs.com/sundaysjava/p/10292119.html
Copyright © 2011-2022 走看看