ant+svn检出并部署项目
来源:互联网 发布:ubuntu vim不保存退出 编辑:程序博客网 时间:2024/05/21 09:33
项目分server端和protal端,这个demo只写了打包server端的。
这份build.xml有个bug就是在这段
<antcall target="changeConfigBefore" />
因为我直接在svn检出的项目上更改配置文件并导出jar。导致下一次运行ant命令时执行到svnUpdate会提示项目有冲突需要解决。
解决方法:可以把server项目拷出来然后在副本项目上操作打包,还有个更方便的方法是更改svnUpdate的target
<target name="svnUpdate" depends="svnCheckout"> <java classname="org.tmatesoft.svn.cli.SVN" dir="${prj.checkout.path}" fork="true"> <arg value="co"/><!-- update改成co 覆盖更新 --> <arg value="--username"/> <arg value="${prj.svn.username}"/> <arg value="--password"/> <arg value="${prj.svn.password}"/> <arg value="${prj.checkout.path}/${prj.svn.name}"/> <classpath refid="antlib" /> </java> </target>
正文
不需要安装ant环境,ant项目结构如下
config.properties配置
#部署项目(逗号分隔)projects=bhjf,mfjk#源码检出目录svncode.path=svncode#源码编译目录compile.path=build#war包保存目录war.path=war#war检出war.upload.path=upload#日志目录log.path=log
build.xml文件
<?xml version="1.0" encoding="UTF-8"?><!--使用ant+svnkit一键部署--><project name="deployment" default="deployment" basedir="."> <!-- 获取部署的项目 --> <property file="${basedir}/config/config.properties" /> <!-- 日志 --> <record name="${basedir}/${log.path}/log.log" loglevel="error" append="no" action="start"/> <!-- server端lib路径 --> <path id="server.classpath"> <fileset dir="${basedir}/${svncode.path}/${src.prj.name}/${src.prj.server}/WebContent/WEB-INF/lib"> <include name="**/*.jar"/> </fileset> </path> <!-- ant库 --> <path id="antlib"> <fileset dir="${basedir}/antlib"> <include name="**/*.jar"/> </fileset> </path> <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="antlib" /> <!-- 部署 --> <target name="deployment"> <input message="选择要部署的项目" addproperty="project" validargs="${projects}" defaultvalue="bhjf" /> <property file="${basedir}/config/project/${project}.properties" /> <antcall target="getSvnProjects" /> <if> <equals arg1="${is_upload}" arg2="1" /> <then> <antcall target="getDestCode"/> </then> <else/> </if> <if> <equals arg1="${project}" arg2="bhjf"/> <then> <antcall target="changeConfigBefore" /> </then> <else/> </if> <antcall target="compile" /> <antcall target="changeConfigAfter" > <param name="src.server" value="${basedir}/${compile.path}/${src.prj.name}/${src.prj.server}" /> </antcall> <antcall target="package" /> <if> <equals arg1="${is_upload}" arg2="1"/> <then> <antcall target="upload"/> <antcall target="restart"/> </then> <else/> </if> </target> <!-- 获取所有项目 --> <target name="getSvnProjects"> <antcall target="checkOut"> <param name="tmp.prj.name" value="${src.prj.server}"/> </antcall> </target> <!-- 公共检出方法 --> <target name="checkOut"> <antcall target="svnUpdate"> <param name="prj.svn.name" value="${tmp.prj.name}"/> <param name="prj.checkout.path" value="${basedir}/${svncode.path}/${src.prj.name}"/> <param name="prj.svn.username" value="${svn.src.username}" /> <param name="prj.svn.password" value="${svn.src.password}" /> <param name="prj.svn.repository" value="${svn.src.repository}/${tmp.prj.name}" /> </antcall> </target> <!-- 项目更新 --> <target name="svnUpdate" depends="svnCheckout"> <java classname="org.tmatesoft.svn.cli.SVN" dir="${prj.checkout.path}" fork="true"> <arg value="update"/> <arg value="--username"/> <arg value="${prj.svn.username}"/> <arg value="--password"/> <arg value="${prj.svn.password}"/> <arg value="${prj.checkout.path}/${prj.svn.name}"/> <classpath refid="antlib" /> </java> </target> <!-- 项目检出 --> <target name="svnCheckout" unless="isProjectExist" depends="checkProjectExist"> <mkdir dir="${prj.checkout.path}"/> <java classname="org.tmatesoft.svn.cli.SVN" dir="${prj.checkout.path}" fork="true"> <arg value="checkout"/> <arg value="--username"/> <arg value="${prj.svn.username}"/> <arg value="--password"/> <arg value="${prj.svn.password}"/> <arg value="${prj.svn.repository}"/> <classpath refid="antlib" /> </java> </target> <!-- 项目是否已检出 --> <target name="checkProjectExist"> <condition property="isProjectExist"> <and> <available file="${prj.checkout.path}/${prj.svn.name}" /> </and> </condition> </target> <!-- 获取svn war文件 --> <target name="getDestCode"> <antcall target="svnUpdate"> <param name="prj.svn.name" value="${dest.prj.name}" /> <param name="prj.checkout.path" value="${basedir}/${war.upload.path}/${src.prj.name}" /> <param name="prj.svn.username" value="${svn.dest.username}" /> <param name="prj.svn.password" value="${svn.dest.password}" /> <param name="prj.svn.repository" value="${svn.dest.repository}/${dest.prj.name}" /> </antcall> </target> <!-- 修改服务端打jar包前需要更改的配置文件 --> <target name="changeConfigBefore"> <property name="svncode.server.src" value="${basedir}/${svncode.path}/${src.prj.name}/${src.prj.server}" /> <replaceregexp byline="true" file="${svncode.server.src}/src/com/dy/core/trust/hisxfpay/hisxfpay.properties" match="trust.hisxfpay.weburl=(.*)" replace="trust.hisxfpay.weburl=${trust.hisxfpay.weburl}" /> <replaceregexp byline="true" file="${svncode.server.src}/src/com/dy/core/trust/hisxfpay/hisxfpay.properties" match="trust.hisxfpay.mobile.url=(.*)" replace="trust.hisxfpay.mobile.url=${trust.hisxfpay.mobile.url}" /> </target> <!-- 编译项目 --> <target name="compile" depends="clean"> <antcall target="build.server" /> <!--<antcall target="build.protal" > <param name="prj_name" value="admin"/> </antcall> <antcall target="build.protal" > <param name="prj_name" value="user"/> </antcall>--> </target> <target name="clean"> <delete dir="${basedir}/${compile.path}/${src.prj.name}" /> </target> <!-- 编译服务端项目 --> <target name="build.server"> <mkdir dir="${basedir}/${compile.path}/${src.prj.name}/${src.prj.server}" /> <property name="server.path" value="${basedir}/${svncode.path}/${src.prj.name}/${src.prj.server}" /> <property name="server.build.path" value="${basedir}/${compile.path}/${src.prj.name}/${src.prj.server}" /> <copy overwrite="true" todir="${server.build.path}" includeemptydirs="true"> <fileset dir="${server.path}/WebContent" excludes="**/*.svn,**/*.class" /> </copy> <!-- 编译java文件--> <javac srcdir="${server.path}/src" includes="**/*.java" destdir="${server.build.path}/WEB-INF/classes" fork="true" compiler="javac1.6" source="1.6" target="1.6" memoryInitialSize="1024m" memoryMaximumSize="1024m" debug="true" failonerror="true" includeantruntime="true" deprecation="false" encoding="UTF-8"> <classpath refid="server.classpath" /> </javac> <copy overwrite="true" todir="${server.build.path}/WEB-INF/classes" includeemptydirs="false"> <fileset dir="${server.path}/src" excludes="**/*.svn,**/*.java" /> </copy> <copy overwrite="true" todir="${server.build.path}/WEB-INF/classes" includeemptydirs="false"> <fileset dir="${server.path}/config" excludes="**/*.svn,**/*.java" /> </copy> <copy overwrite="true" todir="${server.build.path}/WEB-INF/classes" includeemptydirs="false"> <fileset dir="${server.path}/resources" excludes="**/*.svn,**/*.java" /> </copy> <copy overwrite="true" todir="${server.build.path}/WEB-INF/classes" includeemptydirs="false"> <fileset dir="${server.path}/xmlmapper" excludes="**/*.svn,**/*.java" /> </copy> <!-- 打jar包供protal端调用 --> <jar jarfile="${basedir}/${compile.path}/${src.prj.name}/lib/server.jar"> <fileset dir="${server.build.path}/WEB-INF/classes" includes="**/core/**/*.key,**/core/**/*.properties,**/core/**/*.pfx,**/core/**/*.p12"/> <fileset dir="${server.build.path}/WEB-INF/classes" includes="**/core/**/*.class" excludes="**/core/dao/interceptor/*.class,**/core/dao/jotm/*.class,**/core/dao/BaseMapper.class"/> <fileset dir="${server.build.path}/WEB-INF/classes" includes="**/baf/entity/**/*.class" /> <fileset dir="${server.build.path}/WEB-INF/classes" includes="**/*Service.class" /> <fileset dir="${server.build.path}/WEB-INF/classes" includes="cunnar.properties" /> </jar> </target> <!-- 更改配置文件 --> <target name="changeConfigAfter"> <!-- 更改数据库配置 --> <replaceregexp byline="true" file="${src.server}/WEB-INF/classes/dbconfig.properties" match="system.jdbc.username:(.*)" replace="system.jdbc.username:${jdbc.username}" /> <replaceregexp byline="true" file="${src.server}/WEB-INF/classes/dbconfig.properties" match="system.jdbc.password:(.*)" replace="system.jdbc.password:${jdbc.password}" /> <replaceregexp byline="true" file="${src.server}/WEB-INF/classes/dbconfig.properties" match="system.jdbc.url:(.*)" replace="system.jdbc.url:${jdbc.url}" /> </target> <!-- 打war包 --> <target name="package"> <delete file="${basedir}/${war.path}/${src.prj.name}/${war.prj.server}.war" /> <war encoding="gbk" destfile="${basedir}/${war.path}/${src.prj.name}/${war.prj.server}.war" basedir="${basedir}/${compile.path}/${src.prj.name}/${src.prj.server}"> <include name="**/*" /> </war> </target> <!-- 上传到svn --> <target name="upload"> <antcall target="svnCommit"> <param name="upload.dir" value="${basedir}/${war.upload.path}/${src.prj.name}" /> <param name="upload.war" value="${war.prj.server}.war" /> </antcall> </target> <!-- svn提交war --> <target name="svnCommit" depends="isNewWar,isUpdateWar"> <if> <equals arg1="${svn.is.add}" arg2="1" /> <then> <antcall target="copyWar" /> <antcall target="svnAdd" /> </then> <else> <antcall target="copyWar" /> </else> </if> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="commit"/> <arg value="--username"/> <arg value="${svn.dest.username}"/> <arg value="--password"/> <arg value="${svn.dest.password}"/> <arg value="-m"/> <arg value='"daily build"'/> <arg value="${upload.dir}/${upload.war}"/> <classpath refid="antlib" /> </java> </target> <!-- 首次部署 --> <target name="isNewWar" unless="isFileExist" depends="isDestWarExist"> <property name="svn.is.add" value="1" /> </target> <!-- 二次更新war包 --> <target name="isUpdateWar" if="isFileExist" depends="isDestWarExist"> <property name="svn.is.add" value="0" /> </target> <!-- svn服务器是否有war文件 --> <target name="isDestWarExist"> <condition property="isFileExist"> <and> <available file="${upload.dir}/${upload.war}" /> </and> </condition> </target> <!-- 新打的war包覆盖检出的war包 --> <target name="copyWar"> <copy overwrite="true" tofile="${upload.dir}/${upload.war}" file="${basedir}/${war.path}/${upload.war}" /> </target> <!-- 服务器新增war包 --> <target name="svnAdd"> <java classname="org.tmatesoft.svn.cli.SVN" dir="${basedir}" fork="true"> <arg value="add"/> <arg value="--username"/> <arg value="${svn.dest.username}"/> <arg value="--password"/> <arg value="${svn.dest.password}"/> <arg value="${upload.dir}/${upload.war}"/> <classpath refid="antlib" /> </java> </target> <!-- 停止tomcat服务 --> <target name="shutdown"> <exec executable="${svn.dest.repository}/data/tomcat/bin/shutdown.sh" failonerror="false" /> <sleep seconds="10" /> </target> <!-- 重启tomcat服务 --> <target name="restart" depends="shutdown"> <sleep seconds="5" /> <exec executable="${svn.dest.repository}/data/tomcat/bin/startup.sh" failonerror="true" /> </target> </project>
每个项目各自写自己的prop文件
prop文件名与config.properties里projects要能对应上
如bhjf.properties
#源代码 svn信息svn.src.username=rootsvn.src.password=123456svn.src.repository=svn\://192.168.10.22/project/testproject#源文件 svn路径、名称src.prj.name=testprojectsrc.prj.server=test_server#war包 svn信息svn.dest.username=rootsvn.dest.password=123456svn.dest.repository=svn://192.168.10.22#war包 svn路径、名称dest.prj.name=test.server.comwar.prj.server=test.server.com#是否部署:0只打war 1war包上传到测试站服务器is_upload=0#测试站数据库地址jdbc.username:rootjdbc.password:123456jdbc.url:jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8#开启定时器0关闭,1开启is_scheduled=1
0 0
- ant+svn检出并部署项目
- svn中检出项目后无法部署
- ant + svn 自动部署项目
- svn检出项目不能部署tomcat,检出后就显示为maven项目
- SVN上检出项目
- 通过svn检出项目
- Svn检出项目
- Eclipse-----SVN检出项目
- svn 检出maven 项目
- As从svn检出项目到本地并关联
- 一键部署项目,svn+ant+jetty
- 【SVN】导入项目检出项目
- 使用 ant 从svn 检出项目, 让测试脱离ide 自行打包,发布测试
- svn“作为新项目检出,并使用新建项目向导进行配置”和“做为工作空间中的项目检出”的区别?
- SVN项目检出报错
- 从SVN上检出项目
- SVN检出项目配置流程
- MyEclipse中无法将SVN检出来的项目部署到tomcat中
- python 使用 urllib.urlretrieve()下载网络图片,在本地打开提示文件损坏无法打开
- Unity中prefab materail texture联系
- 如何判断一个变量是否是数字而不是字符串
- 五大常用算法之一:分治算法
- 十六、Spring事务异常回滚,捕获异常不抛出就不会回滚
- ant+svn检出并部署项目
- [乐意黎转载]JavaScript写类的前世今生
- jmeter+jenkins+ant 搭建测试环境
- 打印报表blog集
- EXTENDED LIGHTS OUT----状压或高斯消元
- ATL开发小问题解答—nmake -f ***.mk失败
- hdu5256序列变幻
- Java中如何遍历Map对象的4种方法
- 分类算法:决策树