build.xml的编写

Ant工具是非常有用的工程部署工具,可以自动编译java项目,自动对文件进行打包,则我们可以只需要提交代码,打包直接执行命令就可以,所以非常实用。

Ant工具直接作用到build.xml文件,所以对于build.xml文件进行直接配置。

build.xml文件的组成结构

一般来说,build.xml文件的头元素为,然后包括三个子元素:

  1. property
  2. pathclasspath
  3. target

各个元素的属性

我们可以在Ant手册中可以看到,下面直说以下常用的属性,以部署javaweb文件为例。

project

<project name="" description="" default="" basedir="">

project>

下面对每一个属性进行分析:

  1. name,给定该project的名字,非必须
  2. description,描述该project,非必须
  3. default,必须,指定该xml默认执行的任务,即target元素。
  4. basedir,必须,基目录,所有的文件以该文件夹为基础。

target

<target name="help" description="打印相关帮助信息" >
        <echo>help - 打印帮助信息echo>
target>


<target name="init">
        <mkdir dir="${src.dir}" />
        <mkdir dir="${lib.dir}" />
        <mkdir dir="${war.dir}" />
    target>


<target name="clean" description="delete old build and dist directories" >
        <delete dir="${class.dir}" />
        <delete dir="${war.dir}" />
target>


<target name="complie" description="Complie java sources" depends="clean">
        <mkdir dir="${class.dir}" />
        <mkdir dir="${war.dir}" />

        <javac srcdir="${src.dir}" destdir="${class.dir}">
            <classpath refid="complie.classpath"/>
        javac>

        <copy todir="${class.dir}">
            <fileset dir="${src.dir}" excludes="**\*.java" />
        copy>
target>


<target name="deploy" description="install application to servlet container" depends="complie">
        <delete dir="${webapps.dir}\${webapps.name}" />
        <war destfile="${war.dir}\${webapp.name}.war" basedir="${web.dir}"
            webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >

            <lib dir="${lib.dir}" />
            <classes dir="${class.dir}" />
        war>
target>

从上文中,我们可以看出,存在5个target,每个target执行相关的任务,首先给出target的常用属性。

  1. name 必须,用来区分不同的target
  2. depends 指定该target依赖的target,即执行该target之前必须完成的target。
  3. if =“”用来满足条件时,执行该target
  4. unless=“”不满足条件时,执行target
  5. description 描述该target

下面介绍target的任务,即该target怎么执行,默认的target存在大量任务,大家可以自己查阅 /manual/tasks.在这里只描述以上用到的task。

<javac srcdir="${src.dir}" destdir="${class.dir}">
     <classpath refid="complie.classpath"/>
javac>

javac通常需要srcdir和destdir,srcdir表示源代码所在的位置,而destdir表示将编译后的.class文件存储的位置,通常编译java文件需要外部架包,所有我们将外部架包加入。利用classpath,(classpath和path实际是同一个东西,path作为独立元素使用,而classpath通常作为其他的元素引入使用。)

<copy todir="${class.dir}">
            <fileset dir="${src.dir}" excludes="**\*.java" />
copy>

copy表示将文件复制到其他地方,通常todir表示目的地,必须!子元素通常包括文件集合,fileset,excludes表示不包括的文件,includes表示包括的文件。

<delete dir="${class.dir}" />
<delete dir="${war.dir}" />

delete表示删除相关文件,dir表示要删除的目录,includes表示要删除的相关文件,如果没有表示删除该目录。

<mkdir dir="${src.dir}" />
<mkdir dir="${lib.dir}" />
<mkdir dir="${war.dir}" />

mkdir表示创建文件夹,dir表示创立的文件夹名字。

"${war.dir}\${webapp.name}.war" basedir="${web.dir}"
            webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >

            "${lib.dir}" />
            "${class.dir}" />

主要的属性:

  1. destfile,必须,生成的war包的地址和名字。
  2. webxml,web.xml文件的地址,必须
  3. basedir,打包文件的基目录

包括的打包文件:主要为lib和classes,将其包括进去,一起打包就可以,dir来指定它们的地址。

<echo>help - 打印帮助信息echo>

echo 打印出某个字符串的功能

property

用来指定相关的属性名字,就是基本的键值对,在后面的引用中,可以用${}来引用相关的名字,好处就是做出改变的时候,只需要改变属性值就可以。代码如下:

<property name="webapp.name" value="demo" />
    
    <property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
    
    <property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
    
    <property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
    
    <property name="src.dir" value="${basedir}\src" />
    
    <property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
    
    <property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
    
    <property name="webapps.dir" value="${catalina.home}\webapps"/>
    <property name="web.dir" value="WebContent" />
    <property name="war.dir" value="war"/>

path

path的目的定义相关的lib所在的路径,基本包括tomcat的路径,java的lib路径,webcontent中自己加载的路径。代码如下:

<path id="complie.classpath" >
        <fileset dir="${catalina.home}\lib">
            <include name="*.jar" />            
        fileset>

        <fileset dir="${java.home}\lib">
            <include name="*.jar" />
        fileset>

        <fileset dir="${java.home.ext}">
            <include name="*.jar" />
        fileset>

        <fileset dir="${lib.dir}">
            <include name="*.jar" />
        fileset>
    path>

其中fileset表示目标的文件集合,dir指定该目录下面的文件,include表示包含的文件,其中给定id,则在javac的时候可以直接饮用该id。

另外还有其他很多的task命令比如java和jar等等,下面给出完整的build.xml文件。


<project name="demo" default="complie" basedir=".">
    <property name="webapp.name" value="demo" />
    
    <property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
    
    <property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
    
    <property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
    
    <property name="src.dir" value="${basedir}\src" />
    
    <property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
    
    <property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
    
    <property name="webapps.dir" value="${catalina.home}\webapps"/>
    <property name="web.dir" value="WebContent" />
    <property name="war.dir" value="war"/>

    
    <path id="complie.classpath" >
        <fileset dir="${catalina.home}\lib">
            <include name="*.jar" />            
        fileset>

        <fileset dir="${java.home}\lib">
            <include name="*.jar" />
        fileset>

        <fileset dir="${java.home.ext}">
            <include name="*.jar" />
        fileset>

        <fileset dir="${lib.dir}">
            <include name="*.jar" />
        fileset>
    path>

    
    <target name="help" description="打印相关帮助信息" >
        <echo>help - 打印帮助信息echo>
    target>

    
    <target name="init">
        <mkdir dir="${src.dir}" />
        <mkdir dir="${lib.dir}" />
        <mkdir dir="${war.dir}" />
    target>

    
    <target name="clean" description="delete old build and dist directories" >
        <delete dir="${class.dir}" />
        <delete dir="${war.dir}" />
    target>

    
    <target name="complie" description="Complie java sources" depends="clean">
        <mkdir dir="${class.dir}" />
        <mkdir dir="${war.dir}" />
        <javac srcdir="${src.dir}" destdir="${class.dir}">
            <classpath refid="complie.classpath"/>
        javac>

        <copy todir="${class.dir}">
            <fileset dir="${src.dir}" excludes="**\*.java" />
        copy>
    target>

    
    <target name="deploy" description="install application to servlet container" depends="complie">
        <delete dir="${webapps.dir}\${webapps.name}" />
        <war destfile="${war.dir}\${webapp.name}.war" basedir="${web.dir}"
            webxml="${basedir}\${web.dir}\WEB-INF\web.xml" >

            <lib dir="${lib.dir}" />
            <classes dir="${class.dir}" />
        war>
    target>
project>

你可能感兴趣的:(JavaEE)