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 权威指南》
    读后感: 读这本书的前三章就足够了,其它的章节可以作为手册来查阅,遇到问题再看也不完.
  • 相关阅读:
    Qt表格导出图片
    QItemDelegate edit某个控件后把数据写回model
    qt json操作
    qt在tableview中绘制图片
    qt tableview里面添加控件
    qt QAbstractItemModel一些方法介绍
    ecahrt表格内容自适应
    qt tableview列头背景颜色设置
    qt对plot柱状图颜色设置
    qtdebug和release加载不同的文件配置
  • 原文地址:https://www.cnblogs.com/sunormoon/p/3070019.html
Copyright © 2011-2022 走看看