build.xml的编写

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

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

build.xml文件的组成结构

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

  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>

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

主要的属性:

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

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

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

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

property

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

<property name="webapp.name" value="demo" />
    <!-- 定义tomcat地址 -->
    <property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
    <!-- 定义java的地址 -->
    <property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
    <!-- 定义java.home.ext地址 -->
    <property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
    <!-- 定义src的地址 -->
    <property name="src.dir" value="${basedir}\src" />
    <!-- 定义classes地址 -->
    <property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
    <!-- 定义lib地址 -->
    <property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
    <!-- 定义webapps的的地址-->
    <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文件。

<?xml version="1.0" encoding="UTF-8"?>
<project name="demo" default="complie" basedir=".">
    <property name="webapp.name" value="demo" />
    <!-- 定义tomcat地址 -->
    <property name="catalina.home" value="D:\Java\apache-tomcat-6.0.33"/>
    <!-- 定义java的地址 -->
    <property name="java.home" value="D:\Java\jdk1.6.0_18\jre" />
    <!-- 定义java.home.ext地址 -->
    <property name="java.home.ext" value="D:\Java\jdk1.6.0_18\jre\lib\ext" />
    <!-- 定义src的地址 -->
    <property name="src.dir" value="${basedir}\src" />
    <!-- 定义classes地址 -->
    <property name="class.dir" value="${basedir}\WebContent\WEB-INF\classes"/>
    <!-- 定义lib地址 -->
    <property name="lib.dir" value="${basedir}\WebContent\WEB-INF\lib" />
    <!-- 定义webapps的的地址-->
    <property name="webapps.dir" value="${catalina.home}\webapps"/>
    <property name="web.dir" value="WebContent" />
    <property name="war.dir" value="war"/>

    <!-- *******************设置相关路径 set paths ******************* -->
    <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>

    <!-- init -->
    <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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值