利用ant简单实现windows环境下的自动化编译和部署

来源:互联网 发布:婚庆四件套 知乎 编辑:程序博客网 时间:2024/06/07 01:52

【准备】

1、下载并解压ANT;

2、下载并解压命令行SVN。


ANT下载:http://ant.apache.org/bindownload.cgi

SVN下载:https://www.visualsvn.com/downloads/


【配置】

分别把ANT和SVN命令添加到path路径。



【编写build.xml】

思路:考虑到windows环境下执行远程命令比较麻烦,所以可以考虑在windows服务器上执行ant命令实现自动化部署。

1、创建临时目录,与目标部署文件目录一致,用于最终覆盖部署使用;

2、通过SVN命令,导出干净的java源代码;

3、编译源代码,生成class文件;

4、复制class文件和非java文件至临时目录(到这里,待部署文件已准备就绪);

5、停止服务。

6、备份【待更新部署的目标服务器文件和目录】;

7、删除【待更新部署的目标服务器文件和目录】;

8、复制临时目录文件至【待更新部署的目标服务器文件和目录】;

9、删除临时目录。

10、重启服务。


build.xml

<?xml version="1.0"?><project name="attendance" default="startserver" basedir=".">    <tstamp><format property="today" pattern="yyyyMMdd"/></tstamp>    <property environment="env" />    <property name="jdbc" value="jdbc.properties"/>    <property name="project.dir" value="trunk"/>    <property name="webapp.dir" value="${project.dir}/WebContent"/>    <property name="classes.dir" value="${webapp.dir}/WEB-INF/classes"/>    <property name="lib.dir" value="${webapp.dir}/WEB-INF/lib"/>    <property name="java.jre.lib.dir" value="${env.JAVA_HOME}/jre/lib" />    <property name="tomcat.lib.dir" value="${env.CATALINA_HOME}/lib" />    <property name="server.root.dir" value="D:\apache-tomcat-8.0.39\webapps\ROOT" />    <property name="backup.target.dir" value="D:\backup\attendance\${today}" />        <fileset dir="${lib.dir}">        <include name="**/*.jar" />    </fileset>        <!-- 指定编译class依赖的jar包 -->    <path id="project.class.path">        <fileset dir="${java.jre.lib.dir}">              <include name="**/*.jar" />          </fileset>        <fileset file="${tomcat.lib.dir}/*.jar" />        <fileset file="${lib.dir}/*.jar" />    </path>        <mkdir dir="logs"/>        <!-- 输出执行日志 -->    <record name="logs/ant_log_${today}.log" loglevel="info" append="no" action="start"/>        <!-- 清理classes目录-->    <target name="clean">       <delete dir="${project.dir}"/>    </target>    <!-- export-->    <target name="export" depends="clean">        <exec executable="cmd.exe" failonerror="true">            <arg line="/c svn export https://10.1.1.100/svn/source/attendance/trunk"/>        </exec>    </target>    <!-- 建立classes目录,并编译java源文件到classes目录-->    <target name="compile" depends="export">        <echo message="compling to ${classes.dir}"/>        <mkdir dir="${classes.dir}"/>        <copy todir="${classes.dir}">              <fileset dir="${project.dir}/resource">                <include name="**/*" />              </fileset>            <fileset dir="${project.dir}/src">              <exclude name="**/*.java" />            </fileset>        </copy>        <copy tofile="${webapp.dir}/WEB-INF/config/jdbc.properties" file="${jdbc}"/>        <javac srcdir="${project.dir}/src" destdir="${classes.dir}" source="1.8" target="1.8" encoding="UTF-8" debug="on" debuglevel="lines,vars,source" fork="true" nowarn="on" optimize="on" includeantruntime="false">            <!-- -XDignore.symbol.file解决找不到部分rt.jar中部分类的问题 -->            <!-- -encoding UTF-8解决编码问题(encoding="UTF-8"属性配置可以解决同样的问题) -->            <compilerarg line="-encoding UTF-8 -XDignore.symbol.file"/>            <!-- 指定依赖的jar包,classpath -->            <classpath refid="project.class.path" />        </javac>    </target>        <target name="stopserver" depends="compile">        <exec executable="cmd.exe" failonerror="true">            <arg line="/c net stop Tomcat8"/>        </exec>    </target>    <target name="backup" depends="stopserver">        <echo message="backuping from ${server.root.dir} to ${backup.target.dir}"/>        <delete dir="${backup.target.dir}"/>        <mkdir dir="${backup.target.dir}"/>        <copy todir="${backup.target.dir}">            <fileset dir="${server.root.dir}">                <include name="**/*" />            </fileset>        </copy>    </target>        <target name="remove" depends="backup">        <echo message="removing from ${server.root.dir}"/>        <!-- <delete verbose="true" includeemptydirs="true">            <fileset dir="${server.root.dir}">                <include name="**/*"/>            </fileset>        </delete> -->        <delete dir="${server.root.dir}" failonerror="true"/>    </target>        <target name="deploy" depends="remove">        <echo message="deploying from ${webapp.dir} to ${server.root.dir}"/>        <mkdir dir="${server.root.dir}"/>        <copy todir="${server.root.dir}">            <fileset dir="${webapp.dir}">                <include name="**/*" />            </fileset>        </copy>        <delete dir="${project.dir}"/>    </target>    <target name="startserver" depends="deploy">        <exec executable="cmd.exe" failonerror="true">            <arg line="/c net start Tomcat8"/>        </exec>    </target></project>


【执行】

把ANT命令保存为BAT文件,以后需要更新部署时,直接双击执行即可。

@echo offant -buildfile build.xmlpause


【注意点】

1、通过Shell调用,Windows必须加 /c,Unix则是加 –c。

2、failonerror    缺省为false,即该命令执行了但是失败了,build仍然继续。

3、编译源代码的classpath需要指定包括jdk的lib包路径;

4、待编译源代码中有中文字符时,需要指定编码格式。

5、ant默认逐条阻塞式执行指令,如果想要并行执行一些指令时,可以使用<parallel>标签。


【附录】

ANT官方WIKI:https://wiki.apache.org/ant/FrontPage


官方文档有示例,但貌似没有详细API说明,所以对于一些命令的使用也可以参考阅读下BAIDU文章。

参考阅读1:http://www.cnblogs.com/halfacre/archive/2012/11/07/2758865.html

参考阅读2:http://cyf0110.iteye.com/blog/1507909

参考阅读3:http://ku-sunny.iteye.com/blog/966011

参考阅读4:http://blog.csdn.net/buptdavid/article/details/4854981


原创粉丝点击