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两个目录。

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/sundaysjava/p/10292119.html
Copyright © 2011-2022 走看看