`
jimb
  • 浏览: 94302 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用ANT工具构建应用程序

阅读更多

3.3.1  ANT工具简介

有没有一个好的工具来帮助人们完成上述这些麻烦的任务呢?答案是有的,它就是Ant工具。Ant是Apache软件基金会Jakarta项目中的一个子项目,是一个基于Java的构建应用程序的工具。根据它的首创者James Duncan Davidson的解释,其名称是Another Neat Tool的首字母缩写,意为另一个干净灵巧的工具。这一缩写却变成了蚂蚁,说来也是因缘巧合,Ant工具的确有几分蚂蚁的天性,比如个头小而负重能力强。还由于它本身是用Java写的,天生就有很好的跨平台的能力,正像蚂蚁有很强的环境适应能力。因此得到了广泛的应用。对于那些建立传统Java应用程序和那些使用HTML、JSP和Servlet以及本书所介绍的框架创建Web应用程序的人来说,Ant极具价值。无论您的Java开发者使用什么操作系统、集成开发环境或者构建环境,Ant都可以将您的工程有机地组合在一起。一些用来开发应用程序的集成开发环境(IDE)实际上也是用Ant来完成我们前面谈到的建目录、拷贝文件、编译及部署等等这些构建应用程序的任务的。

Ant使用build文件来创建应用程序。build文件是一个.xml文件,缺省的文件名为build.xml。它包含有一个项目(project)元素,项目下包含若干(至少要有一个)目标(target),目标下包含任务(task)元素。每个任务元素就是一段可执行的代码。每个任务可以有多个属性(attribute)。任务的一般结构     如下:

xml 代码
  1. <name attribute1="value1" attribute2="value2"/>  

Ant还可以包含一个属性(property)的集合。这些属性(property)可以用任务的形式写在build文件内,也可以写在专门的.properties文件中。一个属性(property)有一个名字和一个值,其名字是大小写敏感的。属性(property)可以被用在任务的属性(attributes)值中,使用的方法是将属性(property)名放在“${”与“}”之间,作为任务的属性(attributes)值。比如,有一个名为src.dir的属性(property),其值为src,则该属性(property)能够以${src.dir}/model形式用在任务的属性(attributes)值中,该值在运行时被解析为src/model。此外,Ant还有一些内建的属性(property)如,操作系统名,项目的基本目录basedir等。

知道这些基本的知识后,我们就可以用Ant来按照与我们手工构建应用程序类似的过程来构建上面的登录例子应用程序了。

3.3.2  创建build.xml文件

使用Ant工具构建和部署应用程序的最主要的任务就是创建build.xml文件。每个应用程序项目对应一个build.xml文件,该文件放在项目的根目录下。下面,我们结合Hello World示例应用程序来看一下创建build.xml文件的过程。

build.xml文件中根元素是<project>元素,其他的元素都包含在该元素中。示例应用中的<project>元素如下:

xml 代码
  1. <project default="deploy" basedir=".">  

这一句定义一个Ant项目,项目有一个可选的名称属性,这里省略了,该项目的缺省目标是部署(deploy),项目的基准目录是当前目录,也就是项目目录本身,其他的目录都是以它为基准算出来的。build.xml文件也在该目录中。

该句后面紧接着的是一系列的属性设置,如项目名、Web应用程序名及各种目录。

3.3.2.1  设置属性

每个应用程序项目都有一些属性,如在项目的目录方面就有:项目的根目录、项目中存放应用程序源代码的目录、Web应用的根目录、应用程序要发布到的服务器所在的目录;一个完整的应用程序项目的目录结构中还包含诸如JavaDoc这样的文档目录和Ant工具用来创建项目时使用的一些临时性的目录,如build目录和存放打包文件的目录等。

示例应用中的属性定义如下:

xml 代码
  1. <property name="project.name"  value="hello" />  
  2.   
  3. <property name="webapp.name"   value="hello"/>  
  4.   
  5. <property name="build.dir"   value="${basedir}/build" />  
  6.   
  7. <property name="src.dir"     value="${basedir}/src" />  
  8.   
  9. <property name="src.java.dir"  value="${src.dir}/com" />  
  10.   
  11. <property name="web.dir"     value="${basedir}/WebRoot" />  
  12.   
  13. <property name="lib.dir"   value="${web.dir}/WEB-INF/lib" />  
  14.   
  15. <property name="dist.dir"    value="${basedir}/dist" />  
  16.   
  17. <property name="warfile"       value="${dist.dir}/${webapp.name}.war"/>  
  18.   
  19. <property environment="env"/>  
  20.   
  21. <property name="tomcat.dir"    value="${env.CATALINA_HOME}"/>  

从这些属性的名字可以看出,它们绝大多数都是非常直白的,一看就知道指的是什么,就不用多说。这里有必要指出的是:

xml 代码
  1. <property environment="env"/>  

这一句与众不同,它不是以名称=xx、值=xx的形式出现,而是以environment=前缀的形式出现,它的用途是用来引用我们在操作系统中设置的环境变量的,规定就是以这种格式来运用的。根据Ant的参考文档,定义属性的方法有六种,有需要的读者可以去查阅该文档。我们的示例build.xml只涉及到了其中的两种形式。

3.3.2.2  设置classpath

在设置完属性后,接下来要做的是设置编译Java源程序时所要用到的classpath,也就是我们在手工编译应用程序时,出现在javac命令中的-classpath后面的内容,这些内容往往是项目的lib目录中的一些.jar或者.zip文件,或者是应用程序服务器的lib目录中的一些.jar或者.zip文件,在我们的示例应用中所用到的是在作为应用程序服务器的Tomcat的lib目录下的.jar文件。因此,该build.xml文件的设置classpath的代码如下:

xml 代码

  1. <path id="classpath">  
  2.   
  3.       <fileset dir="${tomcat.dir}/lib">  
  4.   
  5.         <include name="**/*.jar"/>  
  6.   
  7.       </fileset>  
  8.   
  9.       <fileset dir="${lib.dir}">  
  10.   
  11.         <include name="**/*.jar"/>  
  12.   
  13.       </fileset>  
  14.   
  15. </path>  
3.3.2.3  定义clean目标

在完成属性和classpath的设置后,接下来我们要定义一系列的目标。首先,就是用来做清理工作的目标——clean目标,它要完成的任务是将构建应用程序时临时要用到的build目录删除掉,以免以前残存的内容影响新创建的内容。其代码如下:

xml 代码

  1. <target name="clean" >  
  2.   
  3.     <delete dir="${build.dir}" />  
  4.   
  5. </target>  
3.3.2.4  定义prepare目标

接下来是一个做准备工作的目标,prepare目标。它的任务是建立一个用来构建应用程序的新的build目录结构。它的代码如下:

xml 代码

  1. <target name="prepare" depends="clean"  
  2.   
  3.         description="Create build directories.">  
  4.   
  5.     <mkdir dir="${build.dir}/${project.name}" />  
  6.   
  7.     <mkdir dir="${build.dir}/${project.name}/WEB-INF" />  
  8.   
  9.     <mkdir dir="${build.dir}/${project.name}/WEB-INF/classes" />  
  10.   
  11.     <mkdir dir="${build.dir}/${project.name}/WEB-INF/lib" />  
  12.   
  13. </target>  
3.3.2.5  定义deploy.copyJars目标

有了build目录后,我们就要将lib目录下的库文件拷贝到build目录中对应的lib目录中,这就是deploy.copyJars这个目标的任务。代码如下:

xml 代码

  1. <target name="deploy.copyJars">  
  2.   
  3.     <copy todir="${build.dir}/${project.name}/WEB-INF/lib">  
  4.   
  5.        <fileset dir="${lib.dir}">  
  6.   
  7.         <include name="**/*.jar"/>  
  8.   
  9.         <include name="**/*.dtd"/>  
  10.   
  11.       </fileset>  
  12.   
  13.     </copy>  
  14.   
  15. </target>  
3.2.2.6  定义build目标

有了前面这些准备工作后,现在有条件来构建应用程序了,这就是build目标的职责。build目标主要完成两大任务:其一,是编译Java类的源文件;其二,是将一些静态文件拷贝到build目录下的相应目录中去。其代码如下:

xml 代码

  1. <target name="build" depends="prepare,deploy.copyJars"  
  2.   
  3.      description="Compile Java files and copy static files." >  
  4.   
  5.     <javac srcdir="${src.java.dir}" destdir=   
  6.   
  7.                "${build.dir}/${project.name}/WEB-INF/classes">  
  8.   
  9.          <include name="**/*.java" />  
  10.   
  11.          <classpath refid="classpath"/>  
  12.   
  13.     </javac>  
  14.   
  15.     <copy todir="${build.dir}/${project.name}/WEB-INF">  
  16.   
  17.         <fileset dir="${web.dir}/WEB-INF">  
  18.   
  19.         <include name="*.xml" />  
  20.   
  21.         <include name="*.tld" />  
  22.   
  23.       </fileset>  
  24.   
  25.     </copy>  
  26.   
  27.     <copy todir="${build.dir}/${project.name}/">  
  28.   
  29.       <fileset dir="${web.dir}">  
  30.   
  31.         <include name="*.html" />  
  32.   
  33.         <include name="*.gif" />  
  34.   
  35.         <include name="*.jpg" />  
  36.   
  37.         <include name="*.jsp" />  
  38.   
  39.         <include name="*.xml" />  
  40.   
  41.         <include name="*.css" />  
  42.   
  43.       </fileset>  
  44.   
  45.     </copy>  
  46.   
  47.     <copy todir="${build.dir}/${project.name}/WEB-INF/classes">  
  48.   
  49.          <fileset dir="${src.java.dir}">  
  50.   
  51.            <include name="**/*.properties" />  
  52.   
  53.            <include name="**/*.xml" />  
  54.   
  55.            <exclude name="**/*.java" />  
  56.   
  57.         </fileset>  
  58.   
  59.     </copy>  
  60.   
  61. </target>  
3.3.2.7  定义build.war目标

Web应用程序一般会被打包成Web归档文件即.war形式的文件后再发布(供别人学习的或正在开发中的应用程序也往往直接发布没有打包的目录结构)。build.war目标就是用来打包Web应用程序的,它的代码如下:

xml 代码

  1. <target name="build.war" depends="build">  
  2.   
  3.     <delete dir="${dist.dir}" />  
  4.   
  5.     <mkdir dir="${dist.dir}" />  
  6.   
  7.     <!-- create a war file for distribution -->  
  8.   
  9.     <jar destfile="${dist.dir}/${webapp.name}.war"    
  10.   
  11.                       basedir="${build.dir}/${project.name}"/>  
  12.   
  13.     <delete dir="${build.dir}" />  
  14.   
  15. </target>  
3.3.2.8  定义deploy目标

deploy目标是本示例应用程序项目的最后一个目标,顾名思义,它的任务就是用来部署应用程序的,部署应用程序最简单也是最常用的方法就是将应用程序的.war文件或者是目录结构拷贝到应用服务器缺省的应用程序发布目录下,在使用Tomcat做应用程序服务器的情况下就是拷贝到Tomcat的webapp目录下。代码如下:

xml 代码

  1. <target name="deploy" depends="build.war">  
  2.   
  3.     <copy file="${warfile}" todir="${tomcat.dir}/webapps"/>  
  4.   
  5.     <delete dir="${dist.dir}"/>  
  6.   
  7. </target>  
3.3.3  用ANT工具自动构建和部署应用程序

有了build.xml文件后,用它来构建和部署应用程序就很简单了。具体方法如下:

打开一个DOS窗口,将当前目录切换到要构建的应用程序项目的根目录下,如在Hello World示例应用程序中就是切换到hello目录,在DOS提示符下输入ant后回车就可以了。

工作程序如下:从build.xml文件中的代码可以看出,该Ant项目的缺省目标是deploy,但该目标依赖于build.war目标,而build.war目标又依赖于build目标,由此类推,这将导致build.xml文件中的所有目标都被执行,最后完成应用程序的构建和部署。

这里要说明一下的是,这个build.xml文件只是一个示例,您完全可以根据您项目的实际情况设置不同的属性、目标等。

如果您的应用程序的目录结构与Hello World示例应用程序的目录结构类似,也可以使用该build.xml文件来构建和部署您的应用程序,只是要根据您的实际情况更改如下两句:

xml 代码
  1. <property name="project.name"  value="aaaa" />  
  2.   
  3. <property name="webapp.name"   value="hello"/>  
分享到:
评论

相关推荐

    JAVA_Ant详细介绍与应用

    用Ant实现Java项目的自动构建和部署。 JAVA_Ant详细介绍与应用。 Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它...

    using-ant-to-build-flash:使用 ANT 自动构建 Flash 应用程序游戏的示例集合。 让您的构建持续集成做好准备!

    使用ANT构建flash 使用 ANT 自动构建 Flash 应用程序/游戏的示例集合。 它旨在成为一本烹饪书或学习资源,因此每个示例都尽可能小,并且应该是自我描述的。 让您的构建持续集成做好准备!介绍环境Java首先,您必须...

    ant 学习与总结

    随着应用程序的生成过程变得更加复杂,确保在每次生成期间都使用精确相同的生成步骤,同时实现尽可能多的自动化,以便及时产生一致的生成版本 Apache Ant是一个基于Java的构建工具。从理论上讲,也是一种类似于...

    apache-ant-1.9.6-src

    Ant的主要用途是构建应用程序。Ant提供了一些内置的任务,允许编译、汇编、测试和运行应用程序。也可以有效地用于构建非爪哇应用程序,例如C或C+ +应用程序。更一般地,Ant可以用来试验任何类型的过程,可以描述在...

    ant_in_action.pdf(ant 实战)second edtion

    本书介绍了如何使用Ant 1.7去构建、测试、部署现代的Java应用程序,进行测试驱动的Java应用开发,本书还覆盖了一些最新式的构建技术,包括库管理、持续整合及自动化部署。本书将向你全面介绍大多数Java项目的核心...

    apache-ant-1.9.6

    当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。...

    apache-ant-1.10.3

    当编译Linux内核及一些软件的源程序时,经常要用这个命令。Make命令其实就 是一个项目管理工具,而Ant所实现功能与此类似。像make,gnumake和nmake这些编译工具都有 一定的缺陷,但是Ant却克服了这些工具的缺陷。...

    ant1.9资源

    在Ant工具中每一个任务封装了具体要执行的功能,是Ant工具的基本执行单位。在本小节中,主要引导读者来看下Ant的常用任务及其使用举例。 1. copy任务 该任务主要用来对文件和目录的复制功能。举例如下: Eg1.复制...

    ANT和OpenSSH在Java Web数据安全传输中的应用.pdf

    在java Web系统中,常常需要安全地...ANT是开源应用程序构建工具,而OpenSSH则是基于SSH协议、为联网计算机提供加密通信的数据传输工具。将两者相结合,介绍了java Web系统的远程发布方法,讨论了SSH守护进程方式传输文...

    javabuildtools:Java 构建工具 Ant、Maven、Gradle、JavaFX 端口 jfxmobile-plugin

    概述了如何使用 ANT 构建编译和打包 Java 应用程序 MAVEN_中级 概述如何使用 maven 构建和编译 scala 应用程序 GRADLE_ADVANCED 高级使用 Gradle 为 Android 构建 JavaFX 应用程序 jfxmobile-plugin

    java11安装包正式版

    jdk11官方版是一款专为java编程人员推出的软件开发工具。JAVA JDK 11最新版可以帮助用户轻松的获取到JAVA的运行...能够从应用程序内部对类进行编译这一实现使得代码生成具有了交互性-我可以以交互方式来修改和构建类。

    DesktopMetadataExtractor:用于从地理空间数据中提取元数据的桌面工具

    要求需要Ant来构建应用程序。建造要创建一个exe文件: $ ant exe要创建一个jar文件: $ ant dist在dist文件夹中创建应用程序。 TODO:描述如何更新GUI的处理过程。创建安装程序要创建exe和jar安装程序: $ cd ...

    introduction-to-build-tools:格但斯克理工大学系列讲座的构建工具(Ant、Maven、Gradle)使用示例

    构建工具介绍此工作区包含用于格但斯克理工大学系列讲座的构建工具(Ant 和 Maven)使用示例。 它们被分类在不同的目录中,每个工具使用示例一个。结构每个主题(构建工具)都有自己的目录。 在其中,每个示例都有...

    Gradle-8.7-all最新版安装压缩包

    Gradle不仅可以构建Java应用程序,还支持多种语言和技术,例如C++、Python、Android等。 更多信息和详细文档可以在[Gradle官方网站](Gradle Build Tool)上找到。 1.2 为什么选择Gradle? 与其他流行的构建工具...

    react-typescript-react-router-redux-antDesign-demo:React + typescript + react-router + redux + antDesign项目构建

    构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 最小化构建,文件名包含哈希。 您的应用已准备好进行部署! 有关更多信息,请参见有关的部分。 npm run eject或...

    java视频聊天

    现在你可以使用IntelliJ IDE运行/调试/测试Jitsi为Android和其他应用程序。 # #使用ANT 库更新包后,首次在构建或清洁后: ANTsetup-libs 使项目: ANT让 重建(清洁,让): ANT重建 运行项目(将安装apk文件和运行在默认...

    SenchaCmd-5.1.0.26-windows

    1.代码生成工具:代码生成工具生成整个应用程序并且扩展生成mvc的组件框架,如,使用sencha generate app 命令,可以自动帮你生成一个完成的应用程序目录框架。 2.JS编译:框架意识,Javascript 编译器了解Sencha的...

    MySQL技术实战开发CRM客户关系管理系统

    由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目,而使用 Ant 则需要十几行。事实上,由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,...

    Android应用程序的编译流程及使用Ant编译项目的攻略

    Android 工程构建的持续集成,需要搭建一套编译和打包自动化流程,比如建立每日构建系统、自动生成发布文件等等。这些都需要我们对Android工程的编译和打包有一个比较深入的理解,例如知道它的每一步都做了什么,...

    junit5-samples:使用JUnit 5收集示例应用程序

    欢迎使用JUnit 5 Samples ,它是在各种构建系统上使用JUnit Jupiter,JUnit Vintage和JUnit Platform的示例应用程序和扩展的集合。 样例项目的CI构建由执行。 使用JDK jshell工具,您可以通过build-all-samples....

Global site tag (gtag.js) - Google Analytics