1、  在进行打包工具的制作前,需要准备的软件有:

svnant-1.3.1

作用是让ant和svn相关联

apache-ant-1.9.7

需要设置ant_home,path,我的配置是:

ANT_HOME = D:\kaipu\cms4all\app-tpl-pack\apache-ant-1.9.7

Path = %ANT_HOME%\bin

2、准备好上面的操作之后,找个英文的目录,比如:D:\kaipu\cms4all\app-tpl-pack,在目录下创建两个文件build.xml和build.properties,并把上面的svnant-1.3.1和apache-ant-1.9.7同样放到相同目录下,最后的目录如下:

3、编写build.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!--default="dist"表示当只执行ant的时候,默认执行下面的dist命令-->

<project name="tpl-release" basedir="." default="dist">

<!--表示build.xml中引入的变量是从build.properties中获得的-->

<property file="build.properties" />

<tstamp>

<format property="TODAY" pattern="yyyy-MM-dd HH:mm:ss" locale="zh" />

</tstamp>

<tstamp>

<format property="date" pattern="yyyyMMdd" locale="zh" />

</tstamp>

<!--ant要和svn相关联,需要配置一个svnant,下面表示相关的内容依赖svnant-->

<path id="svn.classpath">

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

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

</fileset>

</path>

<path id="depends.classpath">

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

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

</fileset>

</path>

<!--引用 svnantlib.xml ,其中定义了ANT的SVN命令,见下方详解。-->

<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svn.classpath" />

<!--<taskdef name="yui-compressor" classname="net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask" classpathref="depends.classpath"></taskdef>-->

<!--通过ant clean命令能够清除dir.source、dir.compile和dir.release这些文件夹-->

<target name="clean">

<echo message="delete all dirs ..." />

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

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

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

</target>

<!--定义svnSetting ,新的设置SVN属性方式-->

<!-- 通过JAVAHL模式(即设置为TRUE),而不是SVNKIT模式 -->

<svnSetting id="svn.settings" svnkit="true" javahl="false" username="${svn.user}" password="${svn.pass}" />

<svnSetting id="svn.settings.1" svnkit="true" javahl="false" username="${svn.user}" password="${svn.pass}" failonerror="false" />

<!-- 导出源代码,导出的过程中是从svn上checkout下来的,执行的命令是:ant export-source-->

<target name="export-source">

<echo message="export source" />

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

<svn refid="svn.settings">

<export srcUrl="${trunk.url}/${proj.app-tpl-api}" destPath="${dir.source}/${proj.app-tpl-api}" revision="HEAD" />

<export srcUrl="${trunk.url}/${proj.app-tpl-impl}" destPath="${dir.source}/${proj.app-tpl-impl}" revision="HEAD"/>

<export srcUrl="${trunk.url}/${proj.app-tpl-webapp}" destPath="${dir.source}/${proj.app-tpl-webapp}" revision="HEAD"/>

</svn>

</target>

<!--从tag版本创建tag,在svn上打上标记-->

<target name="create-tag-from-trunk">

<svn refid="svn.settings.1">

<delete url="${tags.url}/${tag.version.label}" message="tags duplicate!" />

</svn>

<echo message="create tags ${tag.version.label}" />

<svn refid="svn.settings">

<mkdir url="${tags.url}/${tag.version.label}" message="Tag created by tuzq on ${TODAY}" />

<copy srcUrl="${trunk.url}/${proj.app-tpl-api}" destUrl="${tags.url}/${tag.version.label}" message="Tag created by toto on ${TODAY}" />

<copy srcUrl="${trunk.url}/${proj.app-tpl-impl}" destUrl="${tags.url}/${tag.version.label}" message="Tag created by toto on ${TODAY}" />

<copy srcUrl="${trunk.url}/${proj.app-tpl-webapp}" destUrl="${tags.url}/${tag.version.label}" message="Tag created by toto on ${TODAY}" />

</svn>

</target>

<!--编译api代码-->

<target name="compile-app-tpl-api">

<echo message="compile app-tpl-api project" />

<!--javac,编译,对应java中的javac命令,其中srcdir定义源文件路径  destdir定义编译文件路径

includeantruntime作用是指定编译任务是否包含ant的classpath,可有可无,不影响编译,但不写可能会出现警告,为了眼不见心不烦,加上吧

-->

<delete dir="${dir.compile}/${proj.app-tpl-api}"/>

<mkdir dir="${dir.compile}/${proj.app-tpl-api}"/>

<javac srcdir="${dir.source}/${proj.app-tpl-api}${java.source.path}" destdir="${dir.compile}/${proj.app-tpl-api}" debug="${option.compile.debug}" optimize="${option.compile.optimize}" deprecation="${option.compile.deprecation}" encoding="${option.compile.encoding}" target="${option.compile.target}" verbose="${option.compile.verbose}" includeantruntime="false">

<classpath>

<!--依赖的lib包下的jar文件-->

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

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

</fileset>

<!--依赖的tomcat中的jar文件-->

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

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

</fileset>

</classpath>

</javac>

</target>

<!--通过ant命令进行打包,打成的包是:app-tpl-api-1.0-SNAPSHOT.jar-->

<target name="app-tpl-api-jar" description="make jar file">

<delete dir="${dir.compile}/${proj.app-tpl-api}/${tpl.jar.app-tpl-api}"/>

<property name="app-tpl-api-jar-filename" value="${dir.compile}/${proj.app-tpl-api}/${tpl.jar.app-tpl-api}" />

<jar jarfile="${app-tpl-api-jar-filename}" basedir="${dir.compile}/${proj.app-tpl-api}">

<!--为jar包指定manifest,如果jar包不需要打成runnable的形式,manifest可以不要-->

</jar>

</target>

<!--编译app-tpl-impl.jar文件-->

<target name="compile-app-tpl-impl">

<echo message="compile app-tpl-api project" />

<!--javac,编译,对应java中的javac命令,其中srcdir定义源文件路径  destdir定义编译文件路径

includeantruntime作用是指定编译任务是否包含ant的classpath,可有可无,不影响编译,但不写可能会出现警告,为了眼不见心不烦,加上吧

-->

<delete dir="${dir.compile}/${proj.app-tpl-impl}"/>

<copy file="${dir.compile}/${proj.app-tpl-api}/${tpl.jar.app-tpl-api}" todir="${java.depends.lib.dir}"/>

<mkdir dir="${dir.compile}/${proj.app-tpl-impl}"/>

<copydir dest="${dir.compile}/${proj.app-tpl-impl}" src="${dir.source}/${proj.app-tpl-impl}${proj.app-tpl-impl-mapper}">

<include name="sqlmaps/**" />

</copydir>

<javac srcdir="${dir.source}/${proj.app-tpl-impl}${java.source.path}" destdir="${dir.compile}/${proj.app-tpl-impl}" debug="${option.compile.debug}" optimize="${option.compile.optimize}" deprecation="${option.compile.deprecation}" encoding="${option.compile.encoding}" target="${option.compile.target}" verbose="${option.compile.verbose}" includeantruntime="false">

<classpath>

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

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

</fileset>

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

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

</fileset>

</classpath>

</javac>

</target>

<!--打包命令,打成的包是:app-tpl-impl-1.0-SNAPSHOT.jar-->

<target name="app-tpl-impl-jar" description="make jar file">

<delete dir="${dir.compile}/${proj.app-tpl-impl}/${tpl.jar.app-tpl-impl}"/>

<property name="app-tpl-impl-jar-filename" value="${dir.compile}/${proj.app-tpl-impl}/${tpl.jar.app-tpl-impl}" />

<jar jarfile="${app-tpl-impl-jar-filename}" basedir="${dir.compile}/${proj.app-tpl-impl}">

<!--为jar包指定manifest,如果jar包不需要打成runnable的形式,manifest可以不要-->

</jar>

</target>

<!-- 需要参数proj.name,主要是编译web工程 -->

<target name="compile-app-tpl-webapp">

<echo message="compile web project ${tpl.war.app-tpl-webapp}" />

<property name="targetpath" value="${dir.compile}/${proj.app-tpl-webapp}" />

<property name="sourcepath" value="${dir.source}/${proj.app-tpl-webapp}" />

<!-- 编译swf web工程 -->

<mkdir dir="${targetpath}" />

<mkdir dir="${targetpath}WEB-INF/classes" />

<copy file="${dir.compile}/${proj.app-tpl-impl}/${tpl.jar.app-tpl-impl}" todir="${java.depends.lib.dir}"/>

<copy todir="${targetpath}" overwrite="true" preservelastmodified="true">

<fileset dir="${sourcepath}${web.source.path}" />

</copy>

<javac srcdir="${sourcepath}${java.source.path}" destdir="${targetpath}WEB-INF/classes"

debug="${option.compile.debug}" optimize="${option.compile.optimize}" deprecation="${option.compile.deprecation}"

encoding="${option.compile.encoding}"

target="${option.compile.target}" verbose="${option.compile.verbose}" includeantruntime="false">

<classpath>

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

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

</fileset>

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

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

</fileset>

</classpath>

</javac>

<copy todir="${targetpath}WEB-INF/classes" overwrite="true" preservelastmodified="true">

<fileset dir="${sourcepath}${config.source.path}" />

</copy>

<copy todir="${targetpath}WEB-INF/lib" overwrite="true" preservelastmodified="true">

<fileset dir="${java.depends.lib.dir}" />

</copy>

</target>

<!-- 需要war的名称 war.name -->

<target name="war.app-tpl-webapp">

<delete dir="${dir.compile}/${tpl.war.app-tpl-webapp}"/>

<war warfile="${dir.compile}/${tpl.war.app-tpl-webapp}" webxml="${dir.compile}/${proj.app-tpl-webapp}/WEB-INF/web.xml">

<fileset dir="${dir.compile}/${proj.app-tpl-webapp}"/>

</war>

</target>

<!-- 发布相关工程及依赖工具包,通过ant dist命令,可以一次性执行清除、checkout源码、打tag、编译、打jar、打war包等操作 -->

<target name="dist" depends="clean,export-source,create-tag-from-trunk,compile-app-tpl-api,app-tpl-api-jar,compile-app-tpl-impl,app-tpl-impl-jar,compile-app-tpl-webapp,war.app-tpl-webapp">

<!--<target name="dist" depends="compile-app-tpl-api,app-tpl-api-jar,compile-app-tpl-impl,app-tpl-impl-jar,compile-app-tpl-webapp,war.app-tpl-webapp">-->

<!-- <target name="dist" depends="create-tag-from-trunk">-->

<!-- target name="dist" -->

<!-- 编译 -->

<!-- compile-web-proj proj.swf,proj.jod,proj.imagemagick-->

</target>

<!--将需要relase的东西copy到dist目录下-->

<target name="copy-to-dist">

<mkdir dir="${dir.release}/${app-tpl.name}" />

<copy todir="${dir.release}/${app-tpl.name}" overwrite="true" preservelastmodified="true" includeEmptyDirs="false">

<!-- copy war文件  -->

<fileset file="${dir.compile}/${tpl.war.app-tpl-webapp}" />

</copy>

</target>

<!--将所有的dist里面的东西放到svn上的release包中-->

<target name="commit-release">

<!-- 提交到release库中 -->

<echo message="commit to release repository."/>

<svn refid="svn.settings.1">

<delete url="${release.url}/${tag.version.label}" message="Release duplicate!"/>

</svn>

<svn refid="svn.settings">

<mkdir url="${release.url}${tag.version.label}" message="Release created by tuzq on ${TODAY}" />

<import url="${release.url}${tag.version.label}" path="${dir.release}" message="Release created by tuzq on ${TODAY}" />

</svn>

</target>

</project>

4、编写build.properties文件

#svn的相关属性

svn.user=这里填写svn的用户名

svn.pass=这里填写svn的用户名和密码

svnant.dir=D:/kaipu/cms4all/app-tpl-pack/svnant-1.3.1

#打tag时的版本信息

tag.version.label=app-tpl-v1.0.0

branch.version.label=app-tpl-v1.0.0

java.depends.lib.dir=./lib

#java.compile.lib.dir=D:/app/alfresco/tomcat-7.0.32/webapps/alfresco/WEB-INF/lib

tomcat.lib.dir=./tomcatlib

#svn服务器上的相关代码位置

trunk.url=这里放svn上trunk版本的url地址

tags.url=这里放svn上tag版本的url地址

branches.url=这里放branches版本的url地址

release.url=这里放置release版本的url地址

#相关工程的信息

proj.app-tpl-api=app-tpl-api/

proj.app-tpl-impl=app-tpl-impl/

proj.app-tpl-impl-mapper=src/main/resources

proj.app-tpl-webapp=app-tpl-webapp/

tpl.jar.app-tpl-api=app-tpl-api-1.0-SNAPSHOT.jar

tpl.jar.app-tpl-impl=app-tpl-impl-1.0-SNAPSHOT.jar

tpl.war.app-tpl-webapp=app-tpl-webapp.war

#本地编译及发布的目录结构

dir.source=./source

java.source.path=src/main/java

web.source.path=src/main/webapp

config.source.path=src/main/resources

#java的编译选项

option.compile.encoding=utf-8

option.compile.deprecation=on

#将这个打开的时候,才认SpringMVC中的注解

option.compile.debug=true

option.compile.optimize=on

option.compile.target=1.7

#通过下面的方式实现打印信息

option.compile.verbose=true

dir.compile=./build

#目录结构

#---------------------------------------------------------------

dir.release=./dist

app-tpl.name=app-tpl

产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等的更多相关文章

  1. win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件

    win10下通过编译源码方式在chrome中成功安装react-devtools开发工具插件   1.去git上下载react-devtools文件到本地,https://github.com/fac ...

  2. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  3. Hadoop编译源码

    Hadoop编译源码 克隆一个虚拟机 然后一步一步安装就行 安装所需:链接: https://pan.baidu.com/s/1jIZlQmi 密码: gggv 5.1 前期准备工作 1)CentOS ...

  4. LINUX下编译源码时所需提前安装的常用依赖包列表

    yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-deve ...

  5. 转】MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4136303.html 感谢! 平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不 ...

  6. MyEclipse使用总结——使用MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  7. CentOS 编译源码安装MySQL-5.6.16

    mysql5.6.16的安装和之前的5.5.5.1有些不同,编译的时候不再使用./configure来进行了,使用了cmake命令来进行编译项目. 1.准备编译环境 yum -y installmak ...

  8. MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  9. Eclipse使用总结——使用Eclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

随机推荐

  1. django之模板显示静态文件

    由于django的模板渲染机制,图片不能直接引用,否则不会显示. <img src="/static/img/logo.jpg"> 可以看出图片的大小轮廓,但并不显示内 ...

  2. java反射 概念

    一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...

  3. 匿名函数lambda

    匿名函数的定义 在python中,匿名函数的定义如下: func =lambda x:x+1 #定义匿名函数,x为传参,x+1为返回值,func为函数名 res = func(10) #执行匿名函数 ...

  4. 为什么要用 Docker

    作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势. 首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Docker 对系统资源的利用率很 ...

  5. Linux(八)用户管理

    8.1 基本介绍 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账户,然后以这个账户身份进入系统. Linux的用户需要至少要属于一个组. 8 ...

  6. Sybase数据库实现等效的mysql中group_concat功能

    在MySQL中,如果想实现将分组之后的多个数据合并到一列,可以使用group_concat函数,如下图所示: 但是,在Sybase中没有这样的函数(别问我为什么使用Sybase,因为公司用的Sybas ...

  7. Java中使用long类型实现精确的四则运算

    引子 Effective Java 2nd Edition 第48条建议:如果需要精确的答案,请避免使用float和doble.float和double类型主要是为了科学计算和工程计算而设计的.他们执 ...

  8. 计算机网络之套接字SOCKET

    当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口. 此接口再将控制权传递给计算机的操作系统.操作系统将此调用转给某个内部过程,并执行所请求的操作. 内部过程一旦执行完毕,控制权就又 ...

  9. React Native(一) FlexBox布局

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/53241550 本文出自:[余志强的博客] 在React Native ...

  10. springMVC源码分析--AbstractHandlerMapping(二)

    上一篇博客springMVC源码分析--HandlerMapping(一)中我们简单的介绍了HandlerMapping,接下来我们介绍一下它的抽象实现类AbstractHandlerMapping