利用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
- 利用ant简单实现windows环境下的自动化编译和部署
- 利用 ANT 实现自动化部署管理 WebSphere Application Server 5.x 下的应用
- Windows下,Ant自动化编译Android项目具体步骤和方法
- ant实现自动化部署
- 利用ant和junit实现单元测试的自动化
- 利用ant和junit实现单元测试的自动化
- 利用Ant打包、编译和部署
- Windows环境下jenkins配置自动化部署
- 利用Python进行Windows环境下的自动化测试
- Apache Ant 实现自动化部署
- ANT实现自动化软件部署
- Windows下利用MinGW配置GCC纯净编译环境的简单方法
- 利用Ant打包-编译-部署
- android的ant自动化编译环境配置理解
- 利用jenkens和ant来自动化打包、部署、执行你的helloWorld工程只(菜鸟成长之路一)
- 用Ant实现Java项目的自动构建和部署/Eclipse下使用Ant
- 利用bat实现Android的自动化编译
- Windows下Ant的环境配置
- Java:重入锁ReentranLock详解、代码实战、与Synchronized对比
- 很实用的50 个 Bootstrap 插件
- GIT 配置SSH跳过密码 WIN系统下
- Android 计时器
- python-docs 小试
- 利用ant简单实现windows环境下的自动化编译和部署
- python学习:局部变量
- 正则表达式按标点截取一定长度的中文内容
- 主题模型的学习
- ARM汇编笔记(1)——寄存器、常用指令
- try-catch和throw,throws的区别
- ADAS 介绍
- 能量采集 BZOJ
- 使用原生PHP导出Excel表格方法实例分享