用ANT工具管理Web应用

1.用ANT工具管理Web应用

1.1 安装配置 ANT

ANT的下载地址为http://ant.apache.org/。在ANT根目录的manual目录下提供了ANT使用文档。

由于 ANT本身用JAVA语言实现,因此必须在本地安装JDK,才能运行ANT。

需要配置系统环境变量:

JAVA_HOME:JDK的根目录;

ANT_HOME: ANT的根目录;

1.2 创建 build.xml 文件

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

ANT任务描述
property设置 name/value 形式的属性
mkdir创建目录
copy复制文件和文件夹
delete删除文件或文件夹
javac编译 Java 源文件
java运行 Java 类
war为 Web应用打包

下面为bookstore应用创建一个bulid.xml文件,用于编译bookstore应用的Java源代码,并且将这个应用打包为 WAR 文件。

build.xml 中配置的任务能在bookstore的根目录下建立build子目录,然后在build子目录下创建web应用。最后创建的build目录结构如图1-1所示。
图1-1 build.xml配置的build目录结构

图1-1 build.xml配置的build目录结构

<?xml version="1.0" encoding="GB2312" ?>
<project name="bookstore" default="about" basedir=".">
  
  <!-- 初始化Target -->
  <target name="init">
    <property name="build" value="build" />
    <property environment="myenv" /> 
    <property name="tomcat.home" value="${myenv.CATALINA_HOME}" />
    <property name="app.home"          value="." />
    <property name="src.home"          value="${app.home}/src"/>
    <property name="classes.home"      value="${app.home}/WEB-INF/classes"/>
 
    <!-- 定义classpath -->
    <path id="compile.classpath">

      <!-- classpath中包含了WEB-INF/classes目录下的类文件 -->
      <pathelement location="${classes.home}"/>

      <!-- classpath中包含了Tomcat的lib目录下的JAR文件 -->
      <fileset dir="${tomcat.home}/lib">
        <include name="*.jar"/>
      </fileset>

      <!-- classpath中包含了WEB-INF的lib目录下的mysqldriver.jar文件 -->
      <fileset dir="${app.home}/WEB-INF/lib">
        <include name="mysqldriver.jar"/>
      </fileset>
    </path>
  </target>

  <!-- 编译Target,依赖于init Target -->
  <target name="compile"  depends="init" >
    <javac srcdir="${src.home}" destdir="${classes.home}" debug="yes"
        includeAntRuntime="false" deprecation="true"> 

      <classpath refid="compile.classpath"/>
      <compilerarg value="-Xlint:unchecked" />
    </javac>
  </target>


  <!-- 打包Target,依赖于编译Target -->
  <target name="bookstorewar" depends="compile">
    <delete dir="${build}" /> 
    <mkdir dir="${build}" />

    <copy todir="${build}" >
      <fileset dir="${basedir}"  >
        <include name="*.jsp" />
        <include name="*.bmp" />
        <include name="WEB-INF/**" />
        <exclude name="build.xml" />
      </fileset>
    </copy>
       
    <war warfile="${build}/bookstore.war" webxml="${build}/WEB-INF/web.xml">
        <lib dir="${build}/WEB-INF/lib"/>
        <classes dir="${build}/WEB-INF/classes"/>
        <fileset dir="${build}"/>
    </war> 
  </target>

  <!-- 工程说明Target -->
  <target name="about" >
    <echo> 
	This build.xml file contains targets 
        for building bookstore web application
    </echo>
  </target>

</project>

build.xml 的根元素是 project,它有3个属性。

  • name:指定工程的名字。

  • basedir:指定工程的基路径,如果设置为“.”,就表示工程的基路径为 build.xml 文件所在的路径。

  • default:default 属性是必须给定的属性,他指定工程默认的 target 元素,运行 ANT 时如果不指定 target,则使用 default 属性指定的 target。在本例中,默认的 target 为“about”:

    <project name="bookstore" default="about" basedir=".">
    

    在本例中一共定义了4个target:

    <target name="init">
    <target name="compile"  depends="init" >
    <target name="bookstorewar" depends="compile">
    <target name="about" >
    

    target 元素中的depends属性指定在执行本target 之前必须要完成的target,例如bookstorewar target的depends属性为compile,表示在执行 bookstorewar target 之前,必须先执行compile target。而compile target的 depends 属性为 init,表示在执行compile target之前,必须先执行 int target。

  1. init target

    init target完成初始化工作,首先通过property任务来设置属性,一个工程可以设置很多个属性,属性由名字和值构成:

    <property name="build" value="build" />
    <property environment="myenv" /> 
    <property name="tomcat.home" value="${myenv.CATALINA_HOME}" />
    <property name="app.home"          value="." />
    <property name="src.home"          value="${app.home}/src"/>
    <property name="classes.home"      value="${app.home}/WEB-INF/classes"/>
    

    以上代码还设置了一个系统属性 myenv ,通过它可以访问系统环境变量,例如,${myenv.CATALINA_HOME} 代表操作系统中的 CATALINA_HOME 系统环境变量。

    在build.xml文件的其他地方使用属性的格式为${属性名}。例如:

    <mkdir dir="${build}" />
    

    对于以上代码,当ANT运行时,会把属性名build对应的属性值替换到 dir 的具体内容中。

    上述的 init target 接下来还定了一个path ,他代表编译 Java 源文件的 classpass。在classpath中包含了 WEB-INF/classes 目录下的 Java类、Tomcat的lib目录下的类库、以及 WEB-INF/lib 目录下的 mysqldriver.jar 文件。

  2. compile target

    compile target 用来编译Java源程序:

    <target name="compile"  depends="init" >
        <javac srcdir="${src.home}" destdir="${classes.home}" debug="yes"
            includeAntRuntime="false" deprecation="true"> 
    
          <classpath refid="compile.classpath"/>
          <compilerarg value="-Xlint:unchecked" />
        </javac>
      </target>
    

    ANT的 javac 任务可以编译 Java 源程序,Java源文件放在 srcdir 属性指定的文件夹中,编译生成的 .class 文件存放在 destdir 指定的文件夹中,其目录结构与 Java 类的包结构一致。必须确保 Java源文件的目录结构也与 Java 类的包结构相一致。

    javac 任务的 includeAntRuntime 属性指定在编译 Java 类时,是否需要把 ANT 本身的类库也加入到classpath中,默认值为true。建议设为false,这样可以确保编译生成的 Java类不会受到ANT类库的影响。

    javac 任务的 deprecation 属性的默认值为false。当设为true时,如果Java源文件使用了Java API中过时的类,javac任务就会打印出Java源文件引用过时类的详细信息。

    javac 任务的<compilerarg>子元素设定编译时的classpath。<compilerarg>子元素设定一些编译参数,当它的value属性取值为"-Xlint:unchecked",表示会在编译时进行详细的泛型检查,并打印详细的检查信息。

  3. bookstorewar target

    1. bookstorewar target 负责为bookstore应用打包,他首先删除已经存在的build目录,然后重新创建它:
    <delete dir="${build}" /> 
    <mkdir dir="${build}" />
    

    mkdir 任务的 dir 属性指定需要创建的目录。既可以指定绝对路径,也可以指定相对路径。相对路径的基路径取决于的 project 元素的 basedir 属性。

    bookstorewar target 接下来的通过copy任务将bookstore基路径下相关的文件和目录复制到build目录下:

    <copy todir="${build}" >
        <fileset dir="${basedir}"  >
            <include name="*.jsp" />
            <include name="*.bmp" />
            <include name="WEB-INF/**" />
            <exclude name="build.xml" />
        </fileset>
    </copy>
    

    <copy>元素的 todir属性指定复制到目录;<fileset> 元素的 dir属性指定从哪个目录复制文件;<include>元素指定要复制哪些文件;<exclude>指定不需要复制哪些文件;<include name=“WEB-INF/**” />,表示需要复制 WEB-INF 目录下所有的文件、子目录及子目录下的文件。如果是<include name=“WEB-INF/.” />,则表示只需要复制 WEB-INF 目录下的所有文件,不包含子目录及子目录下的文件。

    bookstorewar target 之后通过 war 任务把bookstore应用打包为WAR文件:

    <war warfile="${build}/bookstore.war" webxml="${build}/WEB-INF/web.xml">
        <lib dir="${build}/WEB-INF/lib"/>
        <classes dir="${build}/WEB-INF/classes"/>
        <fileset dir="${build}"/>
    </war> 
    

    warfile属性指定生成的 WAR 文件;webxml属性指定 Web 应用的web.xml 文件;<fileset dir=“${build}”/>指定把build目录下的所有文件加入到 WAR 文件中。

  4. about target

    about target中包含一个 echo 任务,它的作用与DOS的 echo 命令相似,用于向控制台回显文本:

    <target name="about" >
        <echo> 
        This build.xml file contains targets 
            for building bookstore web application
        </echo>
    </target>
    

1.3 运行ANT

用ANT根目录下的bin子目录下的 ant.bat 脚本来运行 ANT。运行 ant.bat时如果不带参数,则会在当前路径下搜索 build.xml 脚本,如果找到,就会运行project元素的default属性指定的target。也可以通过参数来指定build.xml文件和target,在DOS窗口中执行如下命令:

ant -buildfile <build-dir>/build.xml targetname
    
# “-buildfile”参数可简写成“-file” 或“-f”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值