现在的位置: 首页 > 综合 > 正文

用ANT工具管理Struts等Web应用

2013年10月21日 ⁄ 综合 ⁄ 共 5229字 ⁄ 字号 评论关闭

1.
      Ant是apache的一个开源代码项目,它是一个优秀的软件工程管理工具。ANT本身用java语言实现,并且使用xml格式的配置文件来构建工程,可以很方便地实现多平台编译,非常适合管理大型工程。

      本篇将介绍如何用Ant工具来创建和发布struts应用。

      在开发阶段,我们需要建立和准备各种类型的文件,如java源代码,java Class文件,jar文件,jsp文件,html文件,xml文件,tld文件和属性文件等等……。到了应用的发布阶段,需要把相关文件打包为war文件再发布。合理地组织这些文件的目录结构,可以简化项目的统一管理与开发工作。下面介绍一种常用的开发目录结构。

     

app.home-----------+                              --Web应用项目的顶层目录    
    
                   +----build                     ---存放由Ant工具生成的web应用的开放目录结构    
    
                   +----deploy                    ---存放由Ant工具生成的web应用的WAR文件    
    
                   +----doc                       ---存放由Ant工具生成的JavaDoc文件    
    
                   +----lib                       ---存放所有的Jar文件    
    
                   +----classes                   ---存放由Ant编译生成的.class文件    
    
                   +----src                       ---存放Java源文件和属性文件    
    
                   +----webRoot(或者是web)      ---存放web应用的jsp,html 和 图片 以及css和js文件    
    
                                |    
    
                                |    
    
                                +----web_INF     ---存放web.xml,struts.xml,和TLD文件等

2.
ant的下载地址是:http://ant.apache.org/,下载下来后,我们需要在操作系统中配置如下的环境变量:

ANT_HOME  :ANT的安装目录

JAVA_HOME :JDK的安装目录

PATH      :把%ANT_HOME%/bin目录添加到PATH变量中,以便于从DOS命令行下直接运行ANT。(针对windows环境的)


3.

用ant编译规模较大的工程非常方便,每个工程都对应一个build.xml文件,这个文件包含与这个工程有关的路径信息和任务。每个bulid.xml文件都包含一个<project>和至少一个<target>元素。<target>元素中包含一个或多个任务元素,任务是一段可执行代码。ant提供了内置任务,用户可以开发自己的任务元素。

ANT内置任务
ANT任务 描述
property 设置name/value形式的属性
mkdir 创建目录
copy 拷贝文件和文件夹
delete 删除文件和文件夹
javac 编译java源文件
war 为web应用打包
javadoc 为java源文件创建javadoc文档

一个应用项目的根目录下包括build.xml和build.properties文件,此外还包含lib,src,web三个子目录。

<project name ="HelloApp" default="help" basedir=".">

       <!-- ===============property定义=============== -->

       <property file="build.properties"/>

       <property file="app.home"        value="."/>

       <property file="app.name"        value="HelloApp"/>

       <property file="javadoc.pkg.top" value="hello"/>

       <property file="src.home"     value="${app.home}/src"/>

       <property file="lib.home"     value="${app.home}/lib"/>

       <property file="classes.home" value="${app.home}/classes"/>

       <property file="deploy.home"  value="${app.home}/deploy"/>

       <property file="doc.home"     value="${app.home}/doc"/>

       <property file="web.home"     value="${app.home}/web"/>

       <property file="build.home"     value="${app.home}/build"/>

       <property file="build.classes"  value="${build.home}/WEB-INF/classes"/>

       <property file="build.lib"      value="${build.home}/WEB-INF/lib"/>

       <!-- ===============编译路径compilation classpath=============== -->
       <path id="compile.classpath">
            <pathelement location="${classes.home}"/>

            <fileset dir="${lib.home}">

               <include name="*.jar">

               <include name="*.zip">

            </fileset>

            <fileset dir="${tomcat.home}/common/lib">

               <include name="*.jar">

            </fileset>

            <pathelement location="${tomcat.home}/common/lib"/>

      </path>

       <!-- ==============="clean-all" Target=============== -->
       <!-- 负责删除web应用项目根据目录下的build,classes,deploy和doc子目录,并且删除发布到web服务器中的web应用 -->

      <target name="clean-all">

          <delete dir="${build.home}"/>

          <delete dir="${classes.home}"/>

          <delete dir="${deploy.home}"/>

          <!-- 如果tomcat running,是不能delete的 -->

          <delete dir="${webapps.home}/${app.name}" failonerror="false"/>

          <!-- 如果tomcat running,是不能delete的 -->
          <delete dir="${webapps.home}/${app.name}.war"/>

          <delete dir="${doc.home}"/>

      </target>  

      <!-- ==============="prepare" Target=============== -->  
      <!-- 负责在web应用项目根目录下创建classes,deploy,doc,doc/api,build,build/WEB-INF-->
      <!--build/WEB-INF/classes,build/WEB-INF/lib子目录 -->
      <target name="prepare">

          <mkdir dir="${classes.home}"/>

          <mkdir dir="${deploy.home}"/>

          <mkdir dir="${doc.home}"/>

          <mkdir dir="${doc.home}/api"/>

          <mkdir dir="${build.home}/WEB-INF"/>

          <mkdir dir="${build.home}/WEB-INF/classes"/> 

          <mkdir dir="${build.home}/WEB-INF/lib"/>

      </target> 

     <!-- ==="compile" Target=负责编译src子目录下的java源文件,把编译生成的类文件存放在classes子目录下=== -->

      <target name="compile" depends="prepare">
          <!-- javac任务用于编译java源程序,java源程序位于srcdir属性指定的文件夹中-->       <!-- 生成类文件存放在destdir属性指定的文件夹中,其目录结构与java的package一致--> 
          <javac srcdir="${src.home}" destdir="${classes.home}" debug="yes"/>

               <classpath refid="compile.classpath"/>

          </javac>

      </target> 

     <!-- ==============="build" Target=============== -->

      <target name="build" depends="compile">

          <!-- 拷贝webapp content下的jsp,html,tld,xml等,也会拷贝META-INF目录的 =>到build目录-->

          <copy todir="${build.home}">

               <fileset dir="${web.home}"/>

          </copy>

          <!-- 现在开始拷贝所有的java class文件 =>到build/WEB-INF/classes -->

          <copy todir="${build.home}/WEB-INF/classes"/>

               <fileset dir="${classes.home}"/>

          </copy>

          <!-- 现在开始拷贝src下的所有配置文件 =>到build/WEB-INF/classes-->

          <copy todir="${build.home}/WEB-INF/classes">

               <fileset dir="${src.home}"/>

                   <include name="**/*.properties"/>

                   <include name="**/*.prop"/>

               </fileset>

          </copy>

         <!-- 现在开始拷贝所有的jar配置文件 => 到build/WEB-INF/lib下 -->

          <copy todir="${build.home}/WEB-INF/lib">

               <fileset dir="${lib.home}"/>

          </copy>

          <!-- 现在开始打包成war包 ,存放在deploy目录下-->

          <jar jarfile="${deploy.home}/${app.name}.war" basedir="${build.home}"/>
      </target> 

      <!-- ==============="deploy" Target==负责把deploy目录下的.war包文件发布到tomcat服务器的webapps子目录下=========== -->

      <target name="deploy" depends="build">

          <copy todir="${webapp.home}" file="${deploy.home}/${app.name}.war"/>

      </target>

      <!-- ==============="doc" Target===负责编译src目录下的java文件,在doc/api目录下生成javaDoc文档============ -->

      <target name="javadoc" depends="compile">
          <javadoc sourcepath="${src.home}"

                   destdir="${doc.home}"

                   packagenames="${javadoc.pkg.top}.*"/>

      </target>
  </project></span>

4.

build.xml文件首先通过property任务来设置属性,一个工程可以设置很多属性,属性有名字和值构成。

与web服务器相关的属性存放在单独的build.properties文件中。build.properties文件的内容如下:

tomcat.home = c:/jakarta-tomcat

webapps.home = c:/jakarta-tomcat/webapps

tomcat.home属性代表tomcat的根目录,webapps.home属性代表tomcat上发布web应用的目录。可以根据本地机器的实际环境来设置这写属性。

5.

运行<ANT_HOME>/bin/ant.bat脚本,将执行ant命令。如果不带任何参数,ant会在当前路径下搜索build.xml文件,如果找到,就运行<project>元素的default属性指定的target。

在运行ant时,也可以通过参数来指定build.xml文件和target,其语法如下:

ant -buildfile <build-dir>/build.xml targetnames
例:ant -buildfile c:/helloapp/build.xml deploy

然后ant会依次运行hellpapp应用的deploy,javadoc target等。

如果要执行指定的target属性的话,可以直接用命令指定属性名.譬如:

ant deploy

抱歉!评论已关闭.