利用ant進行打包和遠程tomcat部署

背景

在JavaEE項目中,咱們利用eclipse開發工具進行開發,將項目部署到遠程服務器上。手動部署比較麻煩。部署頻率比較高的話也會浪費開發時間。java

部署過程:

  • 一、eclipse導出war包,或者利用工具打成war包,
  • 二、關閉服務器。
  • 三、清理服務器原有的war包和緩存等,
  • 四、利用ftp工具將war包上傳到服務器(xshell、filezilla )。
  • 五、而後啓動服務器

爲何選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。web

  • 配置環境變量

配置ANT_HOME:D:\apache-ant-1.9.13 配置path:D:\apache-ant-1.9.13\binshell

  • 驗證ant安裝成功

附件-命令提示符-》輸入ant -version或者ant ,出現以下圖則安裝成功: apache

生成war包的整體思路

一、編譯工程src文件夾下的java文件,生成相應的class文件。緩存

二、將src下的非Java文件(配置文件)拷貝到war下。tomcat

三、將工程WebRoot下的除了class文件和jar包之外的文件,所有拷貝到war包的對應目錄下。服務器

四、將編譯生成的class文件,所有拷貝到war包WEB-INF/classes文件夾下。app

五、將工程lib中的jar包,所有拷貝到war包的WEB-INF/lib下。最後壓縮成war包。 ##步驟eclipse

  • 一、建立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下。

  • 三、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>
相關文章
相關標籤/搜索