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
原创粉丝点击