您的位置:首页 > 其它

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

2017-10-16 16:26 806 查看
【准备】

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 off

ant -buildfile build.xml

pause

【注意点】

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ant
相关文章推荐