文档章节

ant全量/增量打包+环境差异

Arthur126
 Arthur126
发布于 2015/12/22 12:00
字数 1999
阅读 388
收藏 6

       下图是针对性的工程目录结构,有环境差异env目录,打包或编译依赖jar包expandLib目录,其他都是Java web工程常用目录。注意ant的打包配置文件存放到工程根目录下,同时还有2个为增量打包做准备需要的txt文件changeLog.txt(svn、cvs等项目版本控制提交文件记录)、patchfiles.txt(加工changeLog.txt文件记录得到的最终需要增量打包的编译文件):

       解释说明下ant打包的build.xml配置文件,里面含有5个环境的增量打包和全量打包,内容都大同小异,读者自己根据实际情况,灵活应变,不吝赐教。里面包含ant脚本不是较常用命令,注意ant版本是否包含该命令,有关ant的命令说明详见官网API。build.xml配置内容具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<project name="build.taiPingSCV" basedir="." default="help">
    <property name="com.dir" value="."/>
    <property name="com.src.dir" value="${com.dir}/src"/>
    <property name="com.web.dir" value="${com.dir}/WebContent"/>
    <property name="com.webinfo.dir" value="${com.web.dir}/WEB-INF"/>
    <property name="com.lib.dir" value="${com.webinfo.dir}/lib"/>
    <property name="com.expand.lib.dir" value="${com.dir}/expandLib"/>
    
    
    <!-- PRO生产配置环境地址 -->
    <property name="com.Pro.dir" value="${com.dir}/env/pro"/>
    <!-- UAT配置环境地址 -->
    <property name="com.Uat.dir" value="${com.dir}/env/uat"/>
    <!-- PRE配置环境地址 -->
    <property name="com.Pre.dir" value="${com.dir}/env/pre"/>
    <!-- DEV开发环境配置环境地址 -->
    <property name="com.Dev.dir" value="${com.dir}/env/dev"/>
    <!-- REC灾备环境配置环境地址 -->
    <property name="com.Rec.dir" value="${com.dir}/env/rec"/>
    
    <property name="com.build.dir" value="mybuild"/>
    <property name="com.build.webinfo.dir" value="${com.build.dir}/WEB-INF"/> 
    <property name="com.build.class.dir" value="${com.build.webinfo.dir}/classes"/> 
    <property name="com.build.lib.dir" value="${com.build.webinfo.dir}/lib"/>
    <property name="com.dist.dir" value="mydist"/>
    <property name="com.patch.dir" value="mypatch"/>
    <property name="change.log" value="${com.dir}/changeLog.txt"/>
    <property name="patch.includesfile" value="${com.dir}/patchfiles.txt"/>
    

    <path id="lib.class.path">
        <pathelement location="${com.build.class.dir}" />
        <fileset dir="${com.lib.dir}">
            <include name="*.jar"/>    
        </fileset>
        <fileset dir="${com.expand.lib.dir}">
            <include name="*.jar"/>    
        </fileset>
    </path>
    
    <target name="help">
        <echo level="info">--------构建全量命令说明------------</echo>
        <echo level="info">SCVDev:开发测试环境打包</echo>
        <echo level="info">SCVUat:用户测试环境打包</echo>
        <echo level="info">SCVPre:预生产环境打包</echo>
        <echo level="info">SCVPro:生产环境打包</echo>
        <echo level="info">SCVRec:灾备环境打包</echo>
        <echo level="info">---------构建增量命令说明------------</echo>
        <echo level="info">SCVDevPatch:开发测试环境增量打包</echo>
        <echo level="info">SCVUatPatch:用户测试环境增量打包</echo>
        <echo level="info">SCVPrePatch:预生产环境增量打包</echo>
        <echo level="info">SCVProPatch:生产环境增量打包</echo>
        <echo level="info">SCVRecPatch:灾备环境增量打包</echo>
    </target>
    
    <!-- 删除之前的打包文件目录 -->
    <target name="com.deletepath">
        <echo level="info">**************delete path**************</echo>
        <delete dir="${com.dist.dir}"/>
        <delete dir="${com.build.dir}"/>
        <delete dir="${com.patch.dir}"/>
    </target>
    
    <!-- 生成路径文件 -->
    <target name="com.init" depends="com.deletepath">
        <echo level="info">**************build path**************</echo>
        <mkdir dir="${com.dist.dir}"/>
        <mkdir dir="${com.patch.dir}"/>
        <mkdir dir="${com.build.dir}"/>
        <mkdir dir="${com.build.webinfo.dir}"/>
        <mkdir dir="${com.build.class.dir}"/>
        <mkdir dir="${com.build.lib.dir}"/>
    </target>
    
    <!-- 编译java代码-->
    <target name="com.compile" depends="com.init" description="编译源文件">
        <echo level="info">**************compile code**************</echo>
        <javac srcdir="${com.src.dir}" destdir="${com.build.class.dir}" debug="on" source="1.6" target="1.6" >
            <classpath refid="lib.class.path"/>
            <compilerarg line="-encoding GBK "/> 
        </javac>
    </target>
    
    <!-- 通用配置文件拷贝 -->
    <target name="com.copyfile" depends="com.compile" description="拷贝文件打WAR包">
        <echo level="info">**************copy files start**************</echo>
        <copy todir="${com.build.dir}" overwrite="true" preservelastmodified="true">
            <fileset dir="${com.web.dir}">
                <exclude name="**/junit*.jar" />
                <exclude name="**/servlet-api.jar" />
                <exclude name="**/jsp-api.jar" />
                <exclude name="**/rt.jar" />
                <exclude name="**/classes/**" />
            </fileset>
        </copy>
        <copy todir="${com.build.class.dir}" overwrite="true" preservelastmodified="true">
            <fileset dir="${com.src.dir}">
                <exclude name="**/*.class" />        
                <exclude name="**/*.java" />        
            </fileset>    
        </copy>
    </target>
    
    <!-- UAT测试环境文件拷贝并打war包 -->
    <target name="SCVUat" depends="com.copyfile">
        <echo level="info">**************copy uat env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Uat.dir}" />
        </antcall>
        <antcall target="warPackage">
            <param name="war_name" value="COMSCV_Uat" />
            <param name="war_dir" value="${com.build.dir}" />
        </antcall>
        <echo level="info">**************UAT WAR IS OK**************</echo>
    </target>
    
    <!-- PRE预上线环境文件拷贝并打war包 -->
    <target name="SCVPre" depends="com.copyfile">
        <echo level="info">**************copy pre env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Pre.dir}" />
        </antcall>
        <antcall target="warPackage">
            <param name="war_name" value="COMSCV_PRE" />
            <param name="war_dir" value="${com.build.dir}" />
        </antcall>
        <echo level="info">**************PRE WAR IS OK**************</echo>
    </target>
    
    <!-- PRO生产环境文件拷贝并打war包 -->
    <target name="SCVPro" depends="com.copyfile">
        <echo level="info">**************copy pro env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Pro.dir}" />
        </antcall>
        <antcall target="warPackage">
            <param name="war_name" value="COMSCV_Pro" />
            <param name="war_dir" value="${com.build.dir}" />
        </antcall>
        <echo level="info">**************PRO WAR IS OK**************</echo>
    </target>
    
    <!-- DEV测试环境文件拷贝并打war包 -->
    <target name="SCVDev" depends="com.copyfile">
        <echo level="info">**************copy dev env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Dev.dir}" />
        </antcall>
        <antcall target="warPackage">
            <param name="war_name" value="COMSCV_Dev" />
            <param name="war_dir" value="${com.build.dir}" />
        </antcall>
        <echo level="info">**************DEV WAR IS OK**************</echo>
    </target>
    
    <!-- REC灾备环境文件拷贝并打war包 -->
    <target name="SCVRec" depends="com.copyfile">
        <echo level="info">**************copy rec env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Rec.dir}" />
        </antcall>
        <antcall target="warPackage">
            <param name="war_name" value="COMSCV_Rec" />
            <param name="war_dir" value="${com.build.dir}" />
        </antcall>
        <echo level="info">**************REC WAR IS OK**************</echo>
    </target>
    
    <!-- 通用打包 -->
    <target name="warPackage">
        <war destfile="${com.dist.dir}/${war_name}.war" webxml="${com.webinfo.dir}/web.xml">
            <fileset dir="${war_dir}" />
        </war>
        <delete dir="${com.build.dir}" />
        <delete dir="${com.patch.dir}" />
    </target>
    <!-- 增量打包不需要war包自动添加web.xml文件,如更改了web.xml文件,将web.xml文件路径添加到changelogtxt即可 -->
    <!-- needxmlfile属性Since Apache Ant 1.7,故注意ant版本 -->
    <target name="warPatchPackage">
        <war destfile="${com.dist.dir}/${war_name}.war" needxmlfile="false">
            <fileset dir="${war_dir}" />
        </war>
        <delete dir="${com.build.dir}" />
        <delete dir="${com.patch.dir}" />
    </target>
    
    <!-- 通用拷贝环境差异文件 -->
    <target name="copyEnvFile">
        <copy todir="${com.build.class.dir}" overwrite="true" preservelastmodified="true">
            <fileset dir="${copyFormDir}" />
        </copy>
    </target>
    
    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 各个环境增量打包部分start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
    <!-- 处理增量文件列表 -->
    <target name="patchfile" description="处理 changgeLog文件">
        <!-- 去除RTC提交日志记录中的已添加和已修改 -->
        <replaceregexp file="${change.log}" byline="true" encoding="GBK">
            <regexp pattern="(已修改)|(已添加)|.+(已删除)\s*" />
            <substitution expression="" />
        </replaceregexp>
        <!-- 拷贝提交日志记录到增量文件列表中 -->
        <concat destfile="${patch.includesfile}" append="false" force="true" encoding="GBK" outputencoding="GBK">
            <fileset file="${change.log}" />
            <filterchain>
                <containsregex byline="true" pattern="^([\s]*)(COMSCV/env/.+|COMSCV/src/.+|COMSCV/WebContent/.+)$" replace="\2"/>
            </filterchain>
        </concat>
        <!-- 匹配java文件,改成*.class结尾来保证内部类能被拷贝成功 -->
        <replaceregexp file="${patch.includesfile}" byline="true" encoding="GBK">
            <regexp pattern="^.+/(?:src)/(.+)\.java\s*$" />
            <substitution expression="WEB-INF/classes/\1*.class" />
        </replaceregexp>
        <!-- 匹配各个环境差异文件 -->
        <replaceregexp file="${patch.includesfile}" byline="true" encoding="GBK">
            <regexp pattern="^COMSCV/env/\w{3}/" />
            <substitution expression="WEB-INF/classes/" />
        </replaceregexp>
        <!-- 匹配src下相关配置文件 -->
        <replaceregexp file="${patch.includesfile}" byline="true" encoding="GBK">
            <regexp pattern="^COMSCV/src/" />
            <substitution expression="WEB-INF/classes/" />
        </replaceregexp>
        <!-- 匹配web相关文件 -->
        <replaceregexp file="${patch.includesfile}" byline="true" encoding="GBK">
            <regexp pattern="^COMSCV/WebContent/" />
            <substitution expression="" />
        </replaceregexp>
        <!-- 匹配去除文件目录结尾可能存在的空格 -->
        <replaceregexp file="${patch.includesfile}" byline="true" encoding="GBK">
            <regexp pattern="\s*$" />
            <substitution expression="" />
        </replaceregexp>
        <!-- 拷贝增量文件 -->
        <copy todir="${com.patch.dir}" overwrite="true" preservelastmodified="true">
            <fileset dir="${com.build.dir}" includesfile="${patch.includesfile}" />
        </copy>
    </target>
    <!-- UAT测试环境文件拷贝并打增量war包 -->
    <target name="SCVUatPatch" depends="com.copyfile">
        <echo level="info">**************copy uat env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Uat.dir}" />
        </antcall>
        <antcall target="patchfile" />
        <antcall target="warPatchPackage">
            <param name="war_name" value="COMSCV_Uat" />
            <param name="war_dir" value="${com.patch.dir}" />
        </antcall>
        <echo level="info">**************UAT Patch WAR IS OK**************</echo>
    </target>
    
    <!-- PRE预上线环境文件拷贝并打增量war包 -->
    <target name="SCVPrePatch" depends="com.copyfile">
        <echo level="info">**************copy pre env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Pre.dir}" />
        </antcall>
        <antcall target="patchfile" />
        <antcall target="warPatchPackage">
            <param name="war_name" value="COMSCV_PRE" />
            <param name="war_dir" value="${com.patch.dir}" />
        </antcall>
        <echo level="info">**************PRE Patch WAR IS OK**************</echo>
    </target>
    
    <!-- PRO生产环境文件拷贝并打增量war包 -->
    <target name="SCVProPatch" depends="com.copyfile">
        <echo level="info">**************copy pro env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Pro.dir}" />
        </antcall>
        <antcall target="patchfile" />
        <antcall target="warPatchPackage">
            <param name="war_name" value="COMSCV_Pro" />
            <param name="war_dir" value="${com.patch.dir}" />
        </antcall>
        <echo level="info">**************PRO Patch WAR IS OK**************</echo>
    </target>
    
    <!-- DEV环境文件拷贝并打增量war包 -->
    <target name="SCVDevPatch" depends="com.copyfile">
        <echo level="info">**************copy dev env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Dev.dir}" />
        </antcall>
        <antcall target="patchfile" />
        <antcall target="warPatchPackage">
            <param name="war_name" value="COMSCV_Dev" />
            <param name="war_dir" value="${com.patch.dir}" />
        </antcall>
        <echo level="info">**************DEV Patch WAR IS OK**************</echo>
    </target>
    
    <!-- REC灾备环境文件拷贝并打增量war包 -->
    <target name="SCVRecPatch" depends="com.copyfile">
        <echo level="info">**************copy rec env files**************</echo>
        <antcall target="copyEnvFile">
            <param name="copyFormDir" value="${com.Rec.dir}" />
        </antcall>
        <antcall target="patchfile" />
        <antcall target="warPatchPackage">
            <param name="war_name" value="COMSCV_Rec" />
            <param name="war_dir" value="${com.patch.dir}" />
        </antcall>
        <echo level="info">**************REC Patch WAR IS OK**************</echo>
    </target>
    <!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 各个环境增量打包部分end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
</project>

       增加打包,只需将增量文件路径存放到changeLog.txt,然后执行上面ant增量打包脚本即可。下图为实例:

    
       执行ant增量打包脚本时,需要patchfiles.txt这个临时文件,将changeLog.txt中文件列表信息进行加工处理之后存放至此,供打包使用。下图为其对应实例:

       以上信息仅供码友参考,望灵活使用。如有问题欢迎讨论或赐教。

        其他参考网页:根据Eclipse SVN changelog使用ANT自动打增量包            


© 著作权归作者所有

共有 人打赏支持
Arthur126
粉丝 1
博文 33
码字总数 17900
作品 0
徐汇
高级程序员
Android ANT多渠道打包

在没用AndroidStudio的Gradle构建项目之前,多渠道打包一般都是基于ANT构建,所以在此记录一下,以供查阅! 一、文件准备 1、首先要去官网下载ANT代码。 ANT官网下载地址 2、下载ANT循环打包...

军歌
2014/11/20
0
3
使用Ant 实现批量打包Android应用

由于公司运维需要以及应用中需要加上应用推广的统计,往往要对应二三十个渠道,按照正常方法一个一个的去生成不同渠道包的应用,不仅浪费了时间,而且大大降低了效率. 上一篇讲到使用Ant进行...

Easince
2012/11/27
0
0
Ant编译android,并Proguard代码混淆,v4混淆配置

忙了三四周,总算把购开心的ios版(appStore搜“购开心”)成功翻译成了android版,UI效果基本保持一致,上一张UI效果图吧,很养眼的: 还不错吧,进入正题吧。 以前一直是让我徒弟混淆和打包的...

辉兔狼
2013/09/03
0
1
部署公司打包工具需要注意的一些问题

公司利用ant提供了一个打包环境,大概的功能是通过ant直接checkout cvs服务器上面的代码,编译后生成能够直接部署在weblogic服务器上的ear包。 虽然有部署文档,坑却还是有。ant是必须安装的...

彭苏云
2014/04/02
0
0
基于Jenkins + Tomcat 的安卓客户端可持续化构建及发布下载(loltube.cn)

一. Jenkins 可持续化构建环境请参考 文章 http://my.oschina.net/long0419/blog/183299 二. 基于搭好可持续构建环境完成基础上 ,使用Ant 来编写安卓持续化构建环境 (未使用gradle 原理一样...

long0419
2015/04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

自定义Ubuntu/Windows双系统引导菜单主题

学习Linux自然少不了要装双系统,其中Ubuntu便是我们用的最多的Linux系统。装完双系统后,Ubuntu会自动生成grub开机引导及菜单,及其丑陋,而且很多我们用不到的选项。今天我们就介绍burg:修...

Linux就该这么学
3分钟前
0
0
Go 并发(二)

Go Mutex 通过Mutex和信道处理竞态条件。 临界区 当程序并发运行时,多个协程不应该同时访问那些修改共享资源的代码,这些修改共享资源的代码称为临界区。 Go中通过Mutex可以避免同时访问临界...

春哥大魔王的博客
6分钟前
0
0
CentOS 7安装和部署Docker

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本 uname -r3.10.0-514.el7.x86_64 1、...

狼王黄师傅
9分钟前
0
0
php扩展可以通过pecl 或者phpize 安装

pecl 算是 php 扩展的一个官方聚合平台,一些比较有名,有特点的扩展会被 pecl 收录,收录后可以通过 pecl 的方式安装。但是更多的扩展是没有收录在 pecl 上的,这些扩展还是需要通过 phpize...

bengozhong
10分钟前
0
0
CentOS中如何安装7ZIP

执行以下命令下载安装: wget http://nchc.dl.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2tar -jxvf p7zip_9.20.1_src_all.tar.bz2cd p7zip_9.20.1make......

凯文加内特
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部