Ant 自动化构建技术

                              Ant 自动化构建技术


前言
很早就很想了解一下ant自动化构建技术,工作中确实也用到过ant,只不过都是用它作为一种辅助工具来编译一些开源项目,没有真正的去自己
动手去建立自己的工程,然后使用ant来为自己的工程服务,定制发布的目录结构.
这几天花了点时间去研究了下ant,发现这款工具着实不错,特别是在没有插件的IDE诸如Eclipse下工作,ant确实帮了很多忙.Ant使得我们可以
定制自己的开发工程目录,并配合jdk完成对工程的打包,发布.我们不必去比较它与Maven的孰优孰劣,工具或者技术都是为了服务一个群体或者对象,
每个人的使用习惯,兴趣爱好各异,只要能够高效的达成自己的目标,这样比什么都强,我从来都是实用主义的拥护者。 正文
先将自己的工程目录展示下,这里以一个完整的web项目为例:

Ant 自动化构建技术





























build.xml 长成这样:
<?xml version="1.0" encoding="GBK"?>

<!--工程名  工程所在的基目录-->

<project name="demo" basedir="." default="all">

    <!-- 工程目录特性-->

    <!--src 存放源代码-->

    <property name="src.dir" value="src"/>

    <!--doc 存放项目文档-->

    <property name="doc.dir" value="doc"/>

    <!--lib 存放第三方依赖包-->

    <property name="lib.dir" value="lib"/>

    <!-- dist 存放发布包-->

    <property name="dist.dir" value="dist"/>

    <!-- bin 存放可执行文件,脚本等-->

    <property name="bin.dir" value="bin"/>

    <!-- web项目发布目录-->

    <property name="demo.dir" value="${dist.dir}/demo"/>

    

    <!-- bulid 临时目录-->

    <property name="build.dir" value="build"/>

    <property name="build.classes" value="${build.dir}/classes"/>

    <property name="build.lib" value="${build.dir}/lib"/>

    <property name="build.doc" value="${build.dir}/doc"/>

    <property name="debug.flag" value="on"/>

    

    <!--设置classpath,加载第三方依赖包-->

    <path id="classpath">

        <!--dir 表示依赖包所在的目录

            包含所有lib目录下所有的jar文件

            **: 与0 或者多个目录相匹配

            * : 与0 或者多个字符相匹配

        -->

        <fileset dir="${lib.dir}">

            <include name="**/*.jar"/>

        </fileset>

    </path>

    

    <!-- 创建临时目录-->

    <target name="prepare">

        <mkdir dir="${build.dir}"/>

        <mkdir dir="${build.classes}"/>

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

        

        <!--记录构建时间戳-->

        <tstamp/>

        <echo message="${TSTAMP}"/>

    </target>

    

    <!--编译,打包-->

    <target name="bot" depends="prepare">

        <!--debug : 编译时,是否打开调试开关-->

        <javac destdir="${build.classes}" debug="${debug.flag}">

            <!--要编译的源代码目录-->

            <src path="${src.dir}/java"/>

            <!--不包含的目录文件-->

            <classpath refid="classpath"/>

        </javac>

        

        <!--打包 jarfile 打包后的jar包名称-->

        <jar jarfile="${build.lib}/demo.jar" basedir="${build.classes}">

            <!--

            <exclude name="demo/modules/**"/>

            -->

        </jar>

    </target>

    

    <!--发布-->

    <target name="deploy" depends="bot,javadoc">

        <!--创建发布目录-->

        <mkdir dir="${dist.dir}"/>

        <!--

        <mkdir dir="${dist.dir}/bin"/>

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

        <mkdir dir="${dist.dir}/doc"/>

        <mkdir dir="${dist.dir}/config"/>

        -->

        

        <mkdir dir="${demo.dir}"/>

        

        <!-- 拷贝src/web 下的所有文件到 demo 目录下-->

        <copy todir="${demo.dir}">

            <fileset dir="${src.dir}/web" includes="**"/>

        </copy>

        

        <!-- copy lib 目录到WEB-INF 下 -->

        <copy todir="${demo.dir}/WEB-INF">

            <!-- copy 的时候,如果目标目录(lib)不存在,则连带源目录(lib)一并拷贝-->

            <fileset dir="." includes="${lib.dir}/*.jar"/>

            <!-- -->

        </copy>

        <!-- 将本应用demo的jar包copy到WEB-INF/lib 目录下-->

        <!--

        <copy todir="${demo.dir}/WEB-INF/lib">

            <fileset dir="${build.dir}/lib" includes="demo.jar"/>

        </copy>

        -->

        

        <!-- 拷贝build/classes编译的所有类文件到WEB-INF 下-->

        <copy todir="${demo.dir}/WEB-INF">

            <fileset dir="${build.dir}" includes="classes/**/*.*"/>

        </copy>

        <!-- copy src 目录下所有的资源文件到classes 目录下-->

        <copy todir="${demo.dir}/WEB-INF/classes">

            <fileset dir="${src.dir}/resource" includes="**/*.*"/>

        </copy>

        

    </target>       

        

    

    <!--java doc  文档的生成非常慢,在构建时需要考虑这些-->

    <target name="javadoc" depends="bot">

        <mkdir dir="${doc.dir}/api"/>

        

        <javadoc packagenames="com.*" sourcepath="${src.dir}/java" destdir="${doc.dir}/api" author="true" version="true">

            <classpath refid="classpath"/>

        </javadoc>

    </target>

       

    <!--清理:只清理class类文件的情况-->

    <target name="clean">

        <delete>

            <fileset dir="${build.classes}" includes="**/*.class"/>

        </delete>

    </target>

    

    <!--清理:还原到构建前的状态-->

    <target name="cleanall" depends="clean">

        <delete dir="${build.dir}"/>

        <delete dir="${dist.dir}"/>

        <delete dir="${doc.dir}"/>

    </target>

    

    <target name="all" depends="cleanall,deploy"></target>

    

    

</project>
build之后,dist目录就包含了本次要发布的web项目:

Ant 自动化构建技术


参考书目:《Ant 权威指南》
读后感: 读这本书的前三章就足够了,其它的章节可以作为手册来查阅,遇到问题再看也不完.

你可能感兴趣的:(ant)