Ant - 建设项目


现在我们已经了解了 Ant 中的数据类型,是时候将这些知识付诸实践了。我们将在本章中构建一个项目。本章的目的是构建一个 Ant 文件来编译 java 类并将它们放置在 WEB-INF\classes 文件夹中。

考虑以下项目结构 -

  • 数据库脚本存储在db文件夹中。

  • java源代码存放在src文件夹中。

  • 图片、js、META-INF、样式(css)存储在war文件夹中。

  • Java 服务器页面 (JSP) 存储在jsp文件夹中。

  • 第三方jar文件存储在lib文件夹中。

  • java 类文件存储在WEB-INF\classes文件夹中。

该项目构成了本教程其余部分的Hello World传真应用程序。

C:\work\FaxWebApplication>tree
Folder PATH listing
Volume serial number is 00740061 EC1C:ADB1
C:.
+---db
+---src
. +---faxapp
. +---dao
. +---entity
. +---util
. +---web
+---war
   +---images
   +---js
   +---META-INF
   +---styles
   +---WEB-INF
      +---classes
      +---jsp
      +---lib

这是该项目所需的build.xml 。让我们一点一点地考虑。

<?xml version="1.0"?>
<project name="fax" basedir="." default="build">
   <property name="src.dir" value="src"/>
   <property name="web.dir" value="war"/>
   <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="build" description="Compile source tree java files">
      <mkdir dir="${build.dir}"/>
      <javac destdir="${build.dir}" source="1.5" target="1.5">
         <src path="${src.dir}"/>
         <classpath refid="master-classpath"/>
      </javac>
   </target>
   
   <target name="clean" description="Clean output directories">
      <delete>
         <fileset dir="${build.dir}">
            <include name="**/*.class"/>
         </fileset>
      </delete>
   </target>
</project>

首先,让我们声明源文件夹、Web 文件夹和构建文件夹的一些属性。

<property name="src.dir" value="src"/>
<property name="web.dir" value="war"/>
<property name="build.dir" value="${web.dir}/WEB-INF/classes"/>

在上面提到的例子中 -

  • src.dir 指的是项目的源文件夹,可以在其中找到java源文件。

  • web.dir 指的是项目的Web源文件夹,您可以在其中找到JSP、web.xml、css、javascript和其他Web相关文件

  • build.dir指的是项目编译的输出文件夹。

属性可以引用其他属性。如上面的示例所示,build.dir属性引用了web.dir属性。

在此示例中,src.dir指的是项目的源文件夹。

我们项目的默认目标是编译目标。但首先,让我们看看干净的目标。

顾名思义,clean 目标会删除构建文件夹中的文件。

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

主类路径保存类路径信息。在本例中,它包括 build 文件夹中的类和 lib 文件夹中的 jar 文件。

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

最后,构建目标是构建文件。

首先,我们创建build目录,如果不存在,那么,我们执行javac命令(指定jdk1.5作为我们的目标编译)。我们向 javac 任务提供源文件夹和类路径,并要求它将类文件放入构建文件夹中。

<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>

对此文件执行 Ant 会编译 java 源文件并将类放置在 build 文件夹中。

以下结果是运行 Ant 文件的结果 -

C:\>ant
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

文件被编译并放置在build.dir文件夹中。