《Java学习笔记良葛格》_第1页
《Java学习笔记良葛格》_第2页
《Java学习笔记良葛格》_第3页
《Java学习笔记良葛格》_第4页
《Java学习笔记良葛格》_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Java学习笔记良葛格》fuluAword版..MkKKtkrL-!!1.!!-介Ant简Ant的全名是AnotherNeatTool,是由JamesDuncanDavidson在觉得Make工具无法满足他的Java构建(Build)需求下所编写出来的工具,目前由ApacheSoftwareFoundation 持续进行开发。根据官方网站 上的FAQ中有关什么是ApacheAnt(WhatisApacheAnt)中的回答:AntisaJava-basedbuildtool.Intheory,itiskindoflikeMake,withoutMake'swrinklesandwiththefullportabilityofpureJavacode.简单地说,Ant就像是Make工具,一个为Java应用程序所量身定做的构建工具。A.1Ant设置对于没有使用过Make工具的初学者来说,想象一下如何管理源代码?如何处理Classpath的问题?如何将编译过后的文件指定至某个目录?如何将.class包装为.jar文件? 这一切都可以通过Ant来完成!您不必重复地使用javac、copy、cd和java等指令来达到这些目的,只要编写好一个以 XML组织的构建文件(buildfile),然后下ant指令,上述所有的问题就可轻松地解决。或许有人会说这些需求一些IDE也可以办到,这并不是正确的说法。 Ant并不取代IDE,它增强了IDE,也没有IDE可以取代Ant,它们是互补的,不是相互取代的。简单地归纳一下Ant可以自动完成的任务:编译Java源代码建立jar、war、zip文件464464自动测试与生成报告从CVS等管理系统取得源代码可以先到以下的网站取得一些信息:Ant官方网站()Ant使用者手册()下面介绍如何设定Ant。在下载Ant之后,将压缩文件解压缩至想要的目录,假设是C:\develop\apache-ant。在Windows2000/XP下可以选择桌面上的“我的电脑”并按鼠标右键,选择“属性”后切换至“高级”页面,并单击下方的“环境变量”按钮,在“环境变量”对话框的“系统变量”中单击“新建”按钮,新建 java_home变量,如图A-1所示。图A-1新建java_home变量十歯、■■■■AAnt简介其中变量值必须根据实际安装JDK的目录来决定。按照相同的方式再新建ant_home变量,并设定变量值为Ant的目录,这里假设是C:\develop\apache-anto最后编辑path变量,加入Ant的bin目录,如图A-2所示。笛血丸骏莊孝 ['?,r>c|畫■[曲掘红[即:寒Li*^S31 啦祖一〕图A-2编辑path加入Ant的bin目录A.2第一个Ant构建Ant通过buildfile 来进行构建,它是一个XML文件,默认命名为build.xml。在Ant的buildfile 中可以定义构建项目时的属性(Property)、任务(Task)。一个build.xml 中可以定义多个任务,这些任务可能是建立目录、编译Java源代码、复制文件、删除文件、产生doc文件、进行测试、产生测试报告等,它们通常组织为一个目标(Target)。这里以一个简单的HelloWorld程序来示范如何建立buildfile ,并大致了解属性、任务与目标的作用。虽然 HelloWorld程序使用Ant来构建过于夸张,但可以作为一个快速了解Ant的例子。先在C:\workspace\HelloWorld\src目录中编辑文件:HelloWorld.javapackageonlyfun.caterpillar;publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!!");}}接着描述一下即将进行的工作。假设打算要编译 src中的HelloWorld.java,编译后的.class将保存至C:\workspace\HelloWorld\classes目录中,如果classes目录不存在就建立它,每一次编译前将bin中前一次编译的.class复制到C:\workspace\HelloWorld\bak 目录作备份,如果bak目录不存在就建立它,最后执行HelloWorld程序。465在C:\workspace\HelloWorld下编辑build.xml如下:build.xml<?xmlversion="1.0"?><projectname="example"defaulterun"><propertyname="src.dir"value="src"/><propertyname="classes.dir"value="classes"/><propertyname="bak.dir"value="bak"/><targetname="prepare"><mkdirdir="${classes.dir}"/>466466vmkdirdir="${bak.dir}"/>vcopytodir="${bak.dir}">vfilesetdir="${classes.dir}"/>v/copy>v/target>vtargetname="compile"depends="prepare">vjavacsrcdir="${src.dir}"destdir="${classes.dir}"/></target><targetname="run"depends="compile">vjavaclassname="onlyfun.caterpillar.HelloWorld">vclasspathpath="${classes.dir}"/></java></target></project><project>中包括数个<target>,每一个<target>有一个名称,默认<project>的进入点为run任务,而run任务的完成依赖于compile任务的完成,compile任务的完成依赖于prepare任务的完成。所以在构建开始时,会先执行prepare任务,完成后再执行compile任务,最后执行run任务。<property>标签可以让您设定一些在构建项目时的常用属性值,每一个属 性值会有一个名称对应。以这个例子而言,设定了程序代码来源位置、编译结 果的目标目录与备份目录。一个构建中可以包括数个<target>,在这个例子中主要有3个<target>:编译前的准备工作、进行编译、执行。在编译之前先建立所需要的目录,如果目中•岬■■■■M1;VK 0AAnt简介录已经存在就自动跳过该项工作,然后复制前一次编译的 .class文件至bak目录。接下来进行编译,可以指定编译的源文件来源与目标,然后执行程序。编辑好build.xml 之后,在文字模式下直接执行ant指令即可开始构建项目,ant默认会读取同一个目录下的build.xml。第一次执行ant时会出现以下的文字提示构建过程:C:\workspace\HelloWorld>antBuildfile:build.xmlprepare:[mkdir]Createddir:C:\workspace\HelloWorld\classes[mkdir]Createddir:C:\workspace\HelloWorld\bakcompile:[javac]Compiling1sourcefiletoC:\workspace\HelloWorld\classesrun:[java]HelloWorld!!BUILDSUCCESSFULTotaltime:5seconds完成构建之后,会自动产生classes目录与bak目录,如图A-3所示。

图A-3Ant图A-3Ant会自动完成指定的任务classes目录中会有.class 文件,由于是第一次构建,所以 bak目录中目前没有任何文件。现在假设修改了HelloWorld.java 并存盘,接下来再次执行ant指令。这次出现以下的文字提示构建过程:C:\workspace\HelloWorld>ant467Htlf宵盘*L'WUlBuildfile:build.xml467Htlf宵盘*L'WUlBuildfile:build.xmlprepare:[copy]Copying1filetoC:\workspace\HelloWorld\bakcompile:[javac]Compiling1sourcefiletoC:\workspace\HelloWorld\classesrun:[java]HelloJava!!BUILDSUCCESSFULTotaltime:1second这次由于classes与bak目录已经存在,就不用再进行新建目录的工作。ant检查classes中有之前构建的文件,于是将它复制到 bak目录中。如果打算单独执行某个任务,则在执行 ant指令时写出指定的任务名即可。例如:C:\workspace\HelloWorld>antcompileBuildfile:build.xmlprepare:compile:[javac]Compiling1sourcefiletoC:\workspace\HelloWorld\classesBUILDSUCCESSFULTotaltime:1secondA.3任务(Target)在构建程序时,有些目标所定义的任务可能是可选的,您可以通过在设定<target>时设定一个条件,并在构建时指定该条件为 true或false,以决定该目标是否要执行。例如可以这么设定:<targetname="someTarget"if="conditional">sometask...</target>使用if设定条件目标时,表示只有在conditional 被设置时才会被执行。在执行ant指令时,就可以像下面这样来决定someTarget是否要执行:4683|中■■霜ifHLMMNWV*AAnt简介ant-buildfilebuild.xml-Dconditional=true也可以使用unless来设定条件目标:<targetname="someTarget"unless="conditional">sometask...</target>由于使用了unless来设定条件目标,所以只有在conditional没有被设定时,目标才会被执行。由于ant可以在一个buildfile中调用另一个buildfile,在调用的时候,两个buildfile之间可能会有一些重复的属性设定。如果要避免某个属性被重复设定了,可以这么编写:<targetname="setProperties"unless="setProperties"><propertyname="someProperty"value="someValue"/></target>可以在一个buildfile中调用另一个buildfile。一个简单的例子如下:<projectname="someProject"default="all"><targetname="someTarget"depends="otherTarget"><antantfile="./project2/build.xml"><propertyname="condition_name"value="true"/></ant><target>v/project>在<property>中设定value为true,当在另一个buildfile中有目标使用了条件式(if或uniess)时,这可以给予该条件一个true的特性值。由于默认的buildfile名称是build.xml ,所以也可以只指定项目的目录来调用默认的build.xml 。例如:<projectname="someProject"default="all"><targetname="someTarget"depends="otherTarget"><antantfile="./project2"><propertyname="condition_name"value="true"/>v/ant><target>469</project>也可以仅仅调用另一个buildfile 中的某个目标。例如:<antantfile="./project2/build.xml"target="prepare"/>A.4属性(Property)可以使用<property>标签来定义属性。例如:<propertyname="src.dir"value="src"/><propertyname="classes.dir"value="classes"/><propertyname="bak.dir"value="bak"/>属性都是由name/value组成的,如果在执行时没有特别指定属性值,则默认使用value上定义的值,如果要指定某个属性,则可以执行ant。例如指定classes.dir:ant-Dclasses.dir="WEB-INF/classes"也可以使用<property>取得环境变量,例如下面的buildfile尝试取得JAVA_HOM环境变量并显示它,如果没有设定这个环境变量,则会显示没有设定该环境变量的信息:<?xmlversion="1.0"?><projectname="envSample"default="deploy"basedir="."><!--Setupthe'env'prefixforenvironmentvariables--><propertyenvironment="env"/><targetname="checkJavaHome"unless="env.JAVA_HOME"><failmessage="JAVA_HOMEmustbeset!"/></target></project>也可以设定一个.properties文件,之后在buildfile指定运行ant时加载它。方法如下:<propertyfile="perties"/>也可以通过也可以通过ant执行buildfile 时将指定的属性设定为系统环境变量。例如:vsyspropertykey="JAVA_HOME"value="${javaHome}"/>470墨・・Jf ■■丄NMk廉咗社站恥,AAnt简介还有一些方法可以取得系统属性。例如下面的方式可以取得使用者目录:vechomessage="user.home=${user.home}"/>A.5路径(Path)使用Ant可以轻易地管理Classpath的设定问题。可以使用<path>来管理路径参考,使用vpathelement>来指定目录或jar文件。例如:vpathid="1">vpathelementlocation="."/>vpathelementlocation="./lib/junit.jar"/></path>上面的例子也可以使用分号设定一系列的位置。例如:vpathid="1">vpathelementlocation=".;./lib/junit.jar"/>v/path>也可以使用vfileset>来指定某个目录下的文件。例如:vpathid="2">vfilesetdir="lib">vincludename="**/*.jar"/>v/fileset>v/path><include>或<exclude>标签用来包括或排除文件(或是可以使用ineludes、excludes属性设定),可以在上面使用*表示零个或多个字符符合,?表示符合一个字符。之后在进行<javac>任务时,可以使用<classpath>标签像下面这样引用之前所设定的路径:vjavacsrcdir="./src"destdir="./classes"><classpathrefid="1"/></javac>也可以在进行<javac>任务时直接使用vpathelement>标签来指定Classpath。例如:vjavacsrcdir="./src"destdir="./classes"><classpathrefid="1">vpathelementlocation="."/>R471vpathelementlocation="./lib/junit.jar"/></classpath></javac>A.6常用任务(Task)以下介绍几个常用的<target>任务标签的编写,有些主题与前面介绍重复的,则仅作提示。设定属性当在编写build.xml 时发现到有一些属性设定出现过两次以上,例如目录的指定,可以将这些属性使用<property>加以设定,以后若要改变属性设定,就 只要改变对应的<property>即可,不必在build.xml 中来回搜索与修改。例如:vtargetname="setProperties"><propertyname="src.dir"value="src"/><propertyname="classes.dir"value="classes"/><propertyname="lib.dir"value="lib"/><propertyname="backup.dir"value="bak"/><propertyname="jar.file"value="${lib.dir}/JNamelt.jar"/></target>属性设置在A.4节有较详细的介绍,这里不再重复说明提供help信息可以提供一些ant构建时的help信息。例如:vtargetname="help"description="Typeanthelpfordetail."〉<echomessage="Helpinformation!!"/><echo>Help!Help!</echo>vecho><![CDATA[Hereisahelpinfo.Writeyourowninformationhere.]]></echo></target>CDATA表示提供字符信息(CharacterData),在![CDATA["与"]]>之间的文字可以使用自由格式编写,适用于比较长的信息文字的显示。472AAnt简介在执行ant时加上-projecthelp或-p就会自动显示help这个<target>上的内容。如果<target>上加有description属性,当使用ant-projecthelp时也会一并显示该信息。一个执行的例子如下:C:\workspace\HelloWorld>ant-pBuildfile:build.xmlMaintargets:helpTypeanthelpfordetail.Defaulttarget:run要显示详细信息,则需运行ant时指定help这个<target>。下面介绍如何显示详细信息:C:\workspace\HelloWorld>anthelpBuildfile:build.xmlhelp:[echo]Helpinformation!![echo]Help!Help![echo][echo]Hereisahelpinfo.[echo]Writeyourowninformationhere.[echo]BUILDSUCCESSFULTotaltime:0seconds文件的复制、建立与删除在每一次构建程序前,会备份前一次的构建结果,可以使用 <copy>标签来指定要复制的文件。例如:vtargetname="backup"><copytodir="${backup.dir}"><filesetdir="${classes.dir}"/></copy></target>在构建程序时,可以使用<mkdir>标签建立一些必要的目录。例如:vtargetname="prepareDir"description="preparenecessarydirs">vmkdirdir="${classes.dir}"/>vmkdirdir="${lib.dir}"/>R473vmkdirdir="${backup.dir}"/>v/target>编译程序编译程序的任务当然是最常用的,还可以在编译程序时,加入一些Classpath的指定,这是一个相当方便的功能。例如:vtargetname="compile"description="compilethesourcefiles"〉vjavacsrcdir="./src"destdir="${classes.dir}"><classpath><filesetdir="${lib.dir}"><includename="**/*.jar"/></fileset></classpath></javac></target>A.5节中有更多有关路径设定的介绍,这里不再重复介绍。执行程序<java>标签用来执行Java程序。例如:vjavaclassname="onlyfun.caterpillar.HelloWorld">vclasspathpath="."/></java>制作jar文件可以使用<jar>标签将编译完成的文件打包为.jar文件(JavaArchiveFile),并可以指定MANIFEST文件。例如:vtargetname="jar">vmkdirdir="${libDir}"/><jarjarfile="${libDir}/${jarFile}"manifest="META-INF/MANIFEST.MF"basedir="${lib.dir}"/></target>如果提供有MANIFESTED件,才需要设定manifest属性。为了完成jar打包的任务,可以在META-INF目录下提供一个MANIFESTOES件。例如:474中■电•四AAnt简介MANIFEST.MFManifest-Version:1.0Created-By:caterpillarMain-Class:onlyfun.caterpillar.HelloWorldClass-Path:HelloWorld.jar执行ant时可以指定任务与提供lib目录及jar文件的名称。例如:C:\workspace\HelloWorld>antjar-DlibDir=lib-DjarFile=HelloWorld.jarBuildfile:build.xmljar:[jar]Buildingjar:C:\workspace\HelloWorld\lib\HelloWorld.jarBUILDSUCCESSFULTotaltime:0seconds这里的设定所建立的jar由于包括Main-Class设定,而指定的类别中有main(),所以可以直接执行。例如:C:\workspace\HelloWorld\lib>java-jarHelloWorld.jarHelloJava!!制作war文件对于网站应用程序的部署,可以使用<war>标签将所有相关的文件包装为war(WebApplicationArchive)文件。例如:vtargetname="war"><wardestfile="dist/guestbook.war"webxml="src/webapp/WEB-INF/web.xml"><classesdir="target/classes"/><libfile="beantools.jar"/></war></target>A.7—个简单的buildfile以下是一个简单的buildfile ,您可以根据实际需求来作修改。build.xmlv?xmlversion="1.0"?>vprojectname="example"defaulterun">475vpro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论