Ant - 构建项目

  • 简述

    现在我们已经了解了 Ant 中的数据类型,是时候将这些知识付诸实践了。我们将在本章中构建一个项目。本章的目的是构建一个编译 java 类并将它们放在 WEB-INF\classes 文件夹中的 Ant 文件。
    考虑以下项目结构 -
    • 数据库脚本存储在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>
    
    
    首先,让我们为 source、web 和 build 文件夹声明一些属性。
    
    
    <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源码文件夹,里面可以找到JSPs、web.xml、css、javascript等web相关文件
    • build.dir 指的是项目编译的输出文件夹。
    属性可以引用其他属性。如上例所示,build.dir属性引用了web.dir财产。
    在这个例子中,src.dir指的是项目的源文件夹。
    我们项目的默认目标是compile目标。但首先,让我们看看clean目标。
    顾名思义,clean 目标删除构建文件夹中的文件。
    
    
    <target name="clean" description="Clean output directories">
    
       <delete>
    
          <fileset dir="${build.dir}">
    
             <include name="**/*.class"/>
    
          </fileset>
    
       </delete>
    
    </target>
    
    
    主类路径保存类路径信息。在本例中,它包括构建文件夹中的类和 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 源文件并将类放置在构建文件夹中。
    以下结果是运行 Ant 文件的结果 -
    
    
    C:\>ant
    
    Buildfile: C:\build.xml
    
    
    
    BUILD SUCCESSFUL
    
    Total time: 6.3 seconds
    
    
    这些文件被编译并放置在build.dir文件夹。