Ant 简明教程

Ant - Packaging Applications

我们已零散地了解了 Hello World Fax Web 应用程序中使用 Ant 的不同方面。

现在,是时候将所有内容放在一起,以创建一个完整而全面的 build.xml 文件了。考虑 build.propertiesbuild.xml 文件如下:

build.properties

build.properties 文件中的内容如下。

deploy.path=c:\tomcat6\webapps

build.xml

build.xml 文件如下:

<?xml version="1.0"?>

<project name="fax" basedir="." default="usage">
   <property file="build.properties"/>
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <property name="javadoc.dir" value="doc"/>
   <property name="build.dir" value="${web.dir}/WEB-INF/classes"/>
   <property name="name" value="fax"/>

   <path id="master-classpath">
      <fileset dir="${web.dir}/WEB-INF/lib">
         <include name="*.jar"/>
      </fileset>
      <pathelement path="${build.dir}"/>
   </path>

   <target name="javadoc">
      <javadoc packagenames="faxapp.*" sourcepath="${src.dir}"
         destdir="doc" version="true" windowtitle="Fax Application">
      <doctitle><![CDATA[<h1>= Fax Application =</h1>]]></doctitle>
      <bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]></bottom>
      <group title="util packages" packages="faxapp.util.*"/>
      <group title="web packages" packages="faxapp.web.*"/>
      <group title="data packages" packages="faxapp.entity.*:faxapp.dao.*"/>
      </javadoc>
   </target>

   <target name="usage">
      <echo message=""/>
      <echo message="${name} build file"/>
      <echo message="-----------------------------------"/>
      <echo message=""/>
      <echo message="Available targets are:"/>
      <echo message=""/>
      <echo message="deploy --> Deploy application as directory"/>
      <echo message="deploywar --> Deploy application as a WAR file"/>
      <echo message=""/>
   </target>

   <target name="build" description="Compile main source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5"
         target="1.5" debug="true"
         deprecation="false" optimize="false" failonerror="true">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      </javac>
   </target>
   <target name="deploy" depends="build" description="Deploy application">

   <copy todir="${deploy.path}/${name}" preservelastmodified="true">
      <fileset dir="${web.dir}">
         <include name="**/*.*"/>
      </fileset>
   </copy>
   </target>

   <target name="deploywar" depends="build" description="Deploy application as a WAR file">
      <war destfile="${name}.war" webxml="${web.dir}/WEB-INF/web.xml">
         <fileset dir="${web.dir}">
            <include name="**/*.*"/>
         </fileset>
      </war>
      <copy todir="${deploy.path}" preservelastmodified="true">
         <fileset dir=".">
            <include name="*.war"/>
         </fileset>
      </copy>
   </target>

   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

在上述示例中,

  1. 我们首先在构建属性文件中将 Tomcat 中的 webapps 文件夹路径声明为 deploy.path 变量。

  2. 我们还在 src.dir 变量中声明 Java 文件的源文件夹。

  3. 然后,我们在 web.dir 变量中声明 Web 文件的源文件夹。 javadoc.dir 是用于存储 Java 文档的文件夹, build.dir 是用于存储构建输出文件的路径。

  4. 之后,我们声明 Web 应用程序的名称,在我们的案例中它是 fax

  5. 我们还定义了主类路径,该路径包含项目 WEB-INF/lib 文件夹中存在的 JAR 文件。

  6. 我们还将 build.dir 中存在的类文件包括在主类路径中。

  7. Javadoc 目标会生成项目所需的 javadoc,而 usage 目标用于打印构建文件中存在的通用目标。

上述示例展示了两个部署目标: deploydeploywar

部署目标从 Web 目录将文件复制到部署目录,同时保留上次修改的时间戳。这对于部署到支持热部署的服务器时非常有用。

clean 目标清除先前构建的所有文件。

deploywar 目标构建 war 文件,然后将 war 文件复制到应用程序服务器的部署目录。