增加一段批处理文件 deploy.bat
@echo off
echo 该工程编译需要JDK5.0或以上版本,请保证已设置JAVA_HOME环境变量为JDK5安装目录
@echo off
if "%JAVA_HOME%" == "" goto error
@echo on
"%JAVA_HOME%/bin/java" -cp lib/ant.jar;lib/ant-launcher.jar;lib/ant-contrib.jar;"%JAVA_HOME%/lib/tools.jar" -Dmode=%2 org.apache.tools.ant.launch.Launcher -buildfile build.xml %1
昨天重新翻新简单的学习了下,ant编译部署,每次总是匆匆而看,瞬间则遗忘,这次做个笔记,以备下次,还是那句话灵验,好记性,不如好笔头。
先贴出示例工程中用到的build.xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-project" default="run" basedir="../">
<!-- 这里的basedir是工程的目录为根目录 一般basedir="."表示的是build.xml文件所在的相对目录为根目录即src -->
<echo message="工程的目录是:${basedir}" />
<!-- =================================
property: init ...
================================= -->
<property name="src" value="src" />
<property name="dest" value="/${basedir}/WebRoot/WEB-INF/classes" />
<!-- 定义发布目录 把工程copy到tomcat的工作目录下-->
<property name="webApp" value="./deploy/war/" />
<property name="lib.dir" location="/${basedir}/WebRoot/WEB-INF/lib" />
<property name="classpath" location="/${basedir}/deploy/classes" />
<property name="webname" value="cxf" />
<!-- =================================
classpath: init ...
================================= -->
<!--定义项目编译的时候,以来的lib包的路径-->
<path id="project.class.path">
<pathelement path="${classpath}" />
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- =================================
target: init
================================= -->
<target name="init">
<delete dir="/${basedir}/deploy/classes"></delete>
<!-- 删除war包-->
<delete file="/${basedir}/deploy/${webname}.war"></delete>
<!-- 删除war目录-->
<delete dir="/${basedir}/deploy/war/"></delete>
<!-- 新建目录,比如新建编译需要的class文件路径 -->
<mkdir dir="/${basedir}/deploy/classes" />
</target>
<!-- =================================
target: compile
================================= -->
<!-- 编译class文件-->
<target name="compile" depends="init">
<!-- <javac srcdir="${src}" destdir="/${basedir}/deploy/classes"></javac> -->
<!-- target="1.4" 表示编译器用1.4的方式编译,当然也可以采用1.6,classpath 中的refid这表示依赖于那些jar包编译 -->
<javac fork="true" target="1.6" srcdir="src" destdir="${classpath}" debug="false" >
<classpath refid="project.class.path" />
</javac>
</target>
<!-- =================================
target: run
================================= -->
<target name="run" depends="compile" description="description">
<!--除了class文件外,其他文件拷贝到tomcat目录下-->
<copy todir="${webApp}" overwrite="true">
<fileset dir="${basedir}/WebRoot" excludes="**/*.class" />
</copy>
<copy todir="${webApp}/WEB-INF/classes/" overwrite="true">
<fileset dir="/${basedir}/deploy/classes/">
<include name="**/*.class" />
</fileset>
</copy>
<!--将class文件打包,放到/WEB-INF/lib目录下-->
<!--
<jar destfile="${webApp}/WEB-INF/lib/test.jar">
<fileset dir="/${basedir}/deploy/classes">
<include name="**/*.class" />
</fileset>
</jar>
-->
<war destfile="/${basedir}/deploy/${webname}.war">
<fileset dir="/${basedir}/deploy/war">
</fileset>
</war>
</target>
</project>
工程目录结构:
从以上的XML文件可以看出,整个编译部署的步骤分为三步:
1、 初始化,包括属性定义,类路径,目录删除已经目录创建;
2、 编译java文件;
3、 打包文件,如jar,war
分为三步,这样我觉得哈理解起来很容易,至于里面具体的设置参数我接下来再简单讲讲我从别人那地方理解的,嘎嘎,
编译部署,整个过程与路径有着千丝万缕的关系,当时是相对路径了,其中参考物就是build.xml文件的路径,
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里的basedir是ant工程运行的目录,一般basedir="."表示的是build.xml文件所在的目录,basedir=”../”表示build.xml文件所在的目录的上级目录;name属性名称ant project名称,default默认执行target的名称-->
<project name="ant-project" default="run" basedir="../">
<!—根据日志或监控器的级别输出信息,包括 message,file,append,level-->
<echo message="工程的目录是:${basedir}" />
<!-- 变量定义与初始化,如定义文件夹路径和文件名称等,使用这些变量语法是:${} -->
<property name="src" value="src" />
<property name="dest" value="/${basedir}/WebRoot/WEB-INF/classes" />
<!-- 定义发布目录 把工程copy到tomcat的工作目录下-->
<property name="webApp" value="./deploy/war/" />
<property name="lib.dir" location="/${basedir}/WebRoot/WEB-INF/lib" />
<property name="classpath" location="/${basedir}/deploy/classes" />
<property name="webname" value="cxf" />
<!-- =================================
classpath: init ...
================================= -->
<!--定义项目编译时,所依赖类的路径配置;pathelement指定目录或jar文件,节点属性有 location与path,location指定jar文件,path指目录;fileset指定目录下的所有文件,属性include与exclude -->
<path id="project.class.path">
<pathelement path="${classpath}" />
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- =================================
target: init
================================= -->
<!—delete是删除文件或者目录,属性有dir和file;
<delete includeEmptyDirs=”true”>
<fileset dir=”.” includes=”**/*.bak”/>
</delete>
mkdir是指创建文件或在目录,属性有dir和file-->
<target name="init">
<delete dir="/${basedir}/deploy/classes"></delete>
<!-- 删除war包-->
<delete file="/${basedir}/deploy/${webname}.war"></delete>
<!-- 删除war目录-->
<delete dir="/${basedir}/deploy/war/"></delete>
<!-- 新建目录,比如新建编译需要的class文件路径 -->
<mkdir dir="/${basedir}/deploy/classes" />
</target>
<!-- =================================
target: compile
================================= -->
<!-- 编译class文件-->
<target name="compile" depends="init">
<!-- <javac srcdir="${src}" destdir="/${basedir}/deploy/classes"></javac> -->
<!-- target="1.4" 表示编译器用1.4的方式编译,当然也可以采用1.6,classpath 中的refid这表示依赖于那些jar包编译 -->
<javac fork="true" target="1.6" srcdir="src" destdir="${classpath}" debug="false" >
<classpath refid="project.class.path" />
</javac>
</target>
<!-- =================================
target: run
================================= -->
<target name="run" depends="compile" description="description">
<!--除了class文件外,其他文件拷贝到tomcat目录下-->
<copy todir="${webApp}" overwrite="true">
<fileset dir="${basedir}/WebRoot" excludes="**/*.class" />
</copy>
<copy todir="${webApp}/WEB-INF/classes/" overwrite="true">
<fileset dir="/${basedir}/deploy/classes/">
<include name="**/*.class" />
</fileset>
</copy>
<!--将class文件打包,放到/WEB-INF/lib目录下-->
<!--
<jar destfile="${webApp}/WEB-INF/lib/test.jar">
<fileset dir="/${basedir}/deploy/classes">
<include name="**/*.class" />
</fileset>
</jar>
-->
<war destfile="/${basedir}/deploy/${webname}.war">
<fileset dir="/${basedir}/deploy/war">
</fileset>
</war>
</target>
</project>