首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Ant 自动化构建技术

Posted on 2013-05-09 21:29  sunormoon  阅读(282)  评论(0编辑  收藏  举报
                              Ant 自动化构建技术

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





























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 权威指南》
读后感: 读这本书的前三章就足够了,其它的章节可以作为手册来查阅,遇到问题再看也不完.