zoukankan      html  css  js  c++  java
  • Ant 自动化构建技术

                                  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 权威指南》
    读后感: 读这本书的前三章就足够了,其它的章节可以作为手册来查阅,遇到问题再看也不完.
  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/sunormoon/p/3070019.html
Copyright © 2011-2022 走看看