团队管理中,当项目非常多,而且发布频繁,手动发布往往非常繁琐,决定用自动化处理。
采用ant +svn+svnant
在网络上参考很多人的处理,组合成对自己比较实用的。
准备环境:
1、安装svn client 这个就不多说了。
2、安装ant,在这里我采用ant 1.8.3版本:http://ant.apache.org/,官网上下载zip 解压缩,并配置环境变量。
3、下载svnant ,并解压缩 ,把对应的lib\jar包放入 ant lib 包中。
下载地址: http://subclipse.tigris.org/files/documents/906/49042/svnant-1.3.1.zip
这步很关键,不然svn命令运行不了!
思路:
1、固定一个目录,专门做发布目录,根据不同项目,在期底下建立与项目名称相同的目录。
2、建立build等目录,打成war包后删除对应的build包等操作
3、自动发布到tomcat
以下代码实现的是J2EE web工程打包发布
<?xml version="1.0" encoding="UTF-8"?>
<project name="deploy" default="autodeploy" basedir=".">
<property environment="env" />
<property name="projectName" value="svnant" />
<property name="temporary.dir" value="D:/SVNTest/${projectName}"/>
<property name="deployVersion.dir" value="${temporary.dir}/deployVersion"/>
<property name="tomcat.home" value="d:/apache-tomcat-6.0.32"/>
<property name="ant-lib.dir" value="F:/apache-ant-1.8.3/lib"/>
<property name="svn.url"
value="http://subclipse.tigris.org/svn/subclipse/trunk/svnant/"/>
<property name="svn.name" value="guest"/>
<property name="svn.password" value=""/>
<tstamp>
<format property="deploy.time" pattern="yy-MM-dd HH.mm" />
</tstamp>
<delete dir="${temporary.dir}" />
<mkdir dir="${temporary.dir}" />
<path id="svnant.dir">
<fileset dir="${ant-lib.dir}">
<include name="ganymed.jar" />
<include name="jna.jar" />
<include name="svnant.jar" />
<include name="svnClientAdapter.jar" />
<include name="svnjavahl.jar" />
<include name="svnkit.jar" />
</fileset>
</path>
<!-- define the svn task-->
<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"
classpathref="svnant.dir" />
<!-- prepare for the checking out:clean the directory -->
<target name="prepare"
description="Prepare the dirs for the task">
<delete dir="${temporary.dir}/${projectName}" />
<mkdir dir="${temporary.dir}/${projectName}" />
</target>
<target name="checkout" depends="prepare">
<echo>+=========checkout start============+</echo>
<echo>+ +</echo>
<echo>+ +</echo>
<svn username="${svn.name}" password="${svn.password}"
javahl="false" failοnerrοr="false" svnkit="true">
<checkout url="${svn.url}" revision="HEAD"
destPath="${temporary.dir}/${projectName}" />
</svn>
<echo>+ +</echo>
<echo>+========= checkout end ============+</echo>
</target>
<target name="ant_app" depends="checkout">
<echo>+ ======================== +</echo>
<echo>+ +</echo>
<echo>+ anting application to war and ear +</echo>
<echo>+ +</echo>
<echo>+ ======================== +</echo>
<ant dir="./" antfile="build.xml" inheritall="off"/>
</target>
<target name="mv_to_pack" depends="ant_app">
<delete dir="${deployVersion.dir}\${deploy.time}" />
<mkdir dir="${deployVersion.dir}\${deploy.time}" />
<move file="${temporary.dir}/${projectName}.war" todir="${deployVersion.dir}/${deploy.time}" />
</target>
<target name="execute" depends="mv_to_pack">
</target>
<!--shutdown-->
<target name="shutdown" description="========shutdowntomcat===========">
<exec executable="${tomcat.home}/bin/shutdown.bat" failοnerrοr="false">
</exec>
<sleep seconds="1"/>
<delete file="${tomcat.home}/webapps/${projectName}.war">
</delete>
<delete dir="${tomcat.home}/webapps/${projectName}">
</delete>
</target>
<!--startup-->
<target name="startup" depends="shutdown" description="========startuptomcat===========">
<copy file="${deployVersion.dir}/${deploy.time}/${projectName}.war" todir="${tomcat.home}/webapps" />
<sleep seconds="3"/>
<exec executable="${tomcat.home}/bin/startup.bat" failοnerrοr="false">
</exec>
</target>
<!--autodeploy-->
<target name="autodeploy" depends="execute,startup">
<delete file="${temporary.dir}/${projectName}">
</delete>
</target>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project name="ear" default="deploy" basedir=".">
<property environment="env" />
<property name="projectName" value="svnant" />
<property name="temporary.dir" value="D:/SVNTest/${projectName}"/>
<property name="builder.dir" value="${temporary.dir}/builder" />
<property name="project.dir" value="${temporary.dir}/${projectName}" />
<property name="src.dir" value="${builder.dir}/src" />
<property name="WebRoot.dir" value="${builder.dir}/WebRoot" />
<property name="classes.dir" value="${WebRoot.dir}/WEB-INF/classes" />
<property name="lib.dir" value="${WebRoot.dir}/WEB-INF/lib" />
<path id="build.classpath" description="complie 's classpath">
<fileset dir="${temporary.dir}/${projectName}/WebRoot/WEB-INF/lib">
<include name="*.jar" />
</fileset>
<!-- junit jar -->
<fileset dir="E:\eclipse\plugins">
<include name="org.hamcrest.core_1.1.0.v20090501071000.jar" />
</fileset>
<fileset dir="E:\eclipse\plugins\org.junit_4.8.2.v4_8_2_v20110321-1705">
<include name="junit.jar" />
</fileset>
<pathelement location="${classes.dir}" />
</path>
<target name="copy-files" description="copy,java files">
<delete dir="${builder.dir}" />
<mkdir dir="${builder.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${lib.dir}" />
<!--
<mkdir dir="${WebRoot.dir}/apps" />
-->
<mkdir dir="${src.dir}" />
<copy todir="${src.dir}" overwrite="YES">
<fileset dir="${project.dir}/src" />
</copy>
<copy todir="${WebRoot.dir}" overwrite="yes">
<fileset dir="${temporary.dir}/${projectName}/WebRoot" excludes=".svn" />
</copy>
</target>
<!-- compile file to share lib -->
<target name="compile" depends="copy-files">
<mkdir dir="${classes.dir}" />
<javac fork="true" memoryInitialSize="256m" memoryMaximumSize="500m" srcdir="${src.dir}" destdir="${classes.dir}" includes="**" encoding="UTF-8" debug="true">
<classpath refid="build.classpath" />
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" excludes="**/*.java" />
</copy>
<!-- resources -->
<copy todir="${classes.dir}">
<fileset dir="${temporary.dir}/${projectName}/config"/>
</copy>
</target>
<!-- create the war -->
<target name="web-war" depends="compile" description="create war">
<war destfile="${builder.dir}/../${projectName}.war" webxml="${WebRoot.dir}/WEB-INF/web.xml">
<fileset dir="${WebRoot.dir}">
</fileset>
</war>
</target>
<!-- create the ear -->
<target name="ear" depends="web-war" description="create ear">
<!--
<ear destfile="${builder.dir}/../${projectName}.ear"
appxml="${basedir}/META-INF/META-INF/application.xml"
duplicate="preserve">
<fileset dir="${basedir}/META-INF" includes="**/*.*" />
<fileset dir="${builder.dir}/..">
<include name="${projectName}.war" />
</fileset>
</ear>
-->
</target>
<target name="deploy" depends="ear">
<echo>+ ===================================================== +</echo>
<echo>+ +</echo>
<echo>+ Building Complete, Cleaning Temporary Files...... +</echo>
<echo>+ +</echo>
<echo>+ ===================================================== +</echo>
<delete dir="${builder.dir}">
</delete>
</target>
</project>
bat :
@echo off
del deploy.log
call ant -f ./deploy.xml -debug -l deploy.log
start deploy.log
OK ,搞定!