背景
在JavaEE项目中,我们利用eclipse开发工具进行开发,将项目部署到远程服务器上。手动部署比较麻烦。部署频率比较高的话也会浪费开发时间。
部署过程:
- 1、eclipse导出war包,或者利用工具打成war包,
- 2、关闭服务器。
- 3、清理服务器原有的war包和缓存等,
- 4、利用ftp工具将war包上传到服务器(xshell、filezilla )。
- 5、然后启动服务器
为什么选ANT
总体,打包部署不能一体。频繁重复同样的工作既浪费时间又做一些无用的工作,所以才想到用自动化部署来实现。刚开始想到的是用jenkins,但是jenkins要求的环境比较高。我们的项目不支撑。后来也想到了用maven来管理。但是现有的项目改造很多地方,时间上风险上不是我一个小小的程序员能说的算的。所以我才想到了ant,ant只需要在IDE的项目建一个build.xml就可以支撑。所以比较符合我的项目和我的想法。
ANT打包和部署过程
-
ANT安装
官方 http://ant.apache.org/bindownload.cgi下载新版(目前为Ant1.10.1)的ant,我下载的是1.9.13 得到的是一个apache-ant-1.9.13.zip的压缩包。将其解压到你的硬盘上,例如:D:\apache-ant-1.9.13。
-
配置环境变量
配置ANT_HOME:D:\apache-ant-1.9.13 配置path:D:\apache-ant-1.9.13\bin
-
验证ant安装成功
附件-命令提示符-》输入ant -version或者ant ,出现如下图则安装成功:
生成war包的总体思路
1、编译工程src文件夹下的java文件,生成相应的class文件。
2、将src下的非Java文件(配置文件)拷贝到war下。
3、将工程WebRoot下的除了class文件和jar包以外的文件,全部拷贝到war包的对应目录下。
4、将编译生成的class文件,全部拷贝到war包WEB-INF/classes文件夹下。
5、将工程lib中的jar包,全部拷贝到war包的WEB-INF/lib下。最后压缩成war包。 ##步骤
- 1、创建build.xml 如下图
- 2.配置Ant环境 以前在6.0的时候,我们会在classpath中加入catalina-ant包,具体操作 左边:ant-》runtime -》右边 Global Entries -》add External JARs 加入Catalina-ant包,只需要这一个就行,但是现在7.0得需要再加几个jar包才可以,lib/catalina-ant.jar,lib/tomcat-coyote.jar,lib/tomcat-util.jar,bin/tomcat-juli.jar,这些jar包都在tomcat的lib下。
-
3、build.xml的脚本代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- <project></project> basedir:指的是build.xml所在的路径 default:target标签的name --> <project name="woscancode" default="woscancodeWar" basedir="."> <description> woscancode make a war package! </description> <property name="build" value="${basedir}/build"></property> <!-- 定义属性,打成war包的名称。 --> <property name="warFileName" value="woscancode.war"></property> <property name="classpath_lib" value="WebRoot/WEB-INF/lib" /> <property name="tomcat_classpath_lib" value="D:/apache-tomcat-7.0.69/lib" /> <property name="jdk_classpath_lib" value="C:/Program Files/Java/jdk1.7.0_79/lib/missioncontrol/plugins" /> <property name="jdk_extend_lib" value="C:/Program Files/Java/jdk1.7.0_79/jre/lib" /> <!--path:用于回头访问该项目的后缀路径: http://ip:port/path url:远程Tomcat的管理页面路径 http://ip:port/manager username、password 这个是填写你所设的上传用户的账号和密码 --> <!-- Configure the context path for this application --> <property name="path" value="/woscancode"/> <property name="url" value="http://134.32.76.7:8083/manager/text" /> <property name="username" value="admin" /> <property name="password" value="admin" /> <!-- 定义路径,编译java文件时用到的jar包。 --> <path id="project.lib"> <fileset dir="${jdk_extend_lib}"> <include name="*.jar"/> </fileset> <fileset dir="${classpath_lib}"> <include name="*.jar"/> </fileset> <fileset dir="${tomcat_classpath_lib}"> <include name="*.jar"/> </fileset> <fileset dir="${jdk_classpath_lib}"> <include name="*.jar"/> </fileset> <fileset dir="${basedir}/WebRoot/WEB-INF/lib"> <include name="**/*.jar"/> </fileset> </path> <!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 --> <target name="clean"> <delete dir="${build}/class" includeEmptyDirs ="true"/> <mkdir dir="${build}" /> </target> <!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到创建的文件夹下。 --> <!-- javac 编译Java源文件 srcdir:源文件目录 destdir:输出目录 includes:告诉Ant编译过程中编译哪些位置的源文件(其他位置被忽视) excludes:告诉Ant编译过程中忽略那些位置的源文件 debug:是否开启调试信息 source:强调开发源代码的JDK版本 target:强调编译后的Class文件应该支持的JDK版本 compiler:指定编译器(不一定非得使用Sun的标准编译器进行编译) --> <target name="compile" depends="clean"> <javac srcdir="${basedir}" destdir="${build}/classes" source="1.7" target="1.7" encoding="UTF-8" includeantruntime="false"> <classpath refid="project.lib"></classpath> <compilerarg line="-XDignore.symbol.file"/> </javac> <!--讲src/config不用编译的配置文件信息copy到相应的目录下 --> <copy todir="${build}/classes" > <fileset dir="${basedir}/config"> <include name="**/**.*" /> <exclude name="**/*.jar"/> </fileset> </copy> </target> <!-- 定义默认任务,将class文件集合成jar包。 --> <target name="woscancodeWar" depends="compile"> <!-- 删除原有war包。 --> <delete dir="${build}/${warFileName}" /> <war warfile="${build}/${warFileName}" webxml="${basedir}/WebRoot/WEB-INF/web.xml"> <!-- 将非jar和非class文件拷贝到war包的对应路径下。 --> <fileset dir="${basedir}/WebRoot"> <include name="**/**.*" /> <exclude name="**/*.jar"/> <exclude name="**/*.class"/> </fileset> <!-- 将jar和class文件拷贝到war包的对应路径下。 --> <lib dir="${basedir}/WebRoot/WEB-INF/lib" /> <classes dir="${build}/classes"/> </war> </target> <!-- Configure the custom Ant tasks for the Manager application --> <target name="_def_tomcat_tasks"> <!-- tasks: deploy,undeploy,reload,stop,start,list,roles,resources --> <taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" /> <taskdef name="list" classname="org.apache.catalina.ant.ListTask" /> <taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" /> <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask" /> <!-- <taskdef name="roles" classname="org.apache.catalina.ant.RolesTask" /> --> <taskdef name="start" classname="org.apache.catalina.ant.StartTask" /> <taskdef name="stop" classname="org.apache.catalina.ant.StopTask" /> <taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" /> </target> <target name="redeploy" description="Remove and Install web application" depends="_def_tomcat_tasks"> <antcall target="undeploy"/> <antcall target="deploy"/> </target> <target name="deploy" description="Install web application" depends="_def_tomcat_tasks,woscancodeWar"> <deploy url="${url}" username="${username}" password="${password}" path="${path}" war="${build}/${warFileName}" /> </target> <target name="undeploy" description="Remove web application" depends="_def_tomcat_tasks"> <undeploy url="${url}" username="${username}" password="${password}" path="${path}" /> </target> <target name="reload" description="Reload web application" depends="_def_tomcat_tasks,woscancodeWar"> <reload url="${url}" username="${username}" password="${password}" path="${path}"/> </target> </project>