Ant - 部署应用程序

在上一章中,我们学习了如何打包应用程序并将其部署到文件夹。

在本章中,我们将直接将Web应用程序部署到应用程序服务器部署文件夹,然后我们将添加一些Ant目标来启动和停止服务。让我们继续 Hello World 传真Web应用程序。这是前一章的延续,新组件以粗体突出显示。

build.properties

 #用于构建springapp的Ant属性
 appserver.home = c:\\install\\apache-tomcat-7.0.19 
 #Tomcat 5使用$ appserver.home}/server/lib 
  #for Tomcat 6使用$ appserver.home}/lib 
 appserver.lib = ${appserver.home}/lib 
 deploy.path = ${appserver.home}/webapps 
 tomcat.manager.url = http://www.it1352.com/manager 
 tomcat.manager.username = it1352
 tomcat.manager.password = secret


build.xml

<?xml version = "1.0"?>

<project name = "fax" basedir = "." default = "usage">
   <property file = "build.properties"/>
   <property name = "src.dir" value = "src"/>
   <property name = "web.dir" value = "war"/>
   <property name = "javadoc.dir" value = "doc"/>
   <property name = "build.dir" value = "${web.dir}/WEB-INF/classes"/>
   <property name = "name" value = "fax"/>

   <path id = "master-classpath">
      <fileset dir = "${web.dir}/WEB-INF/lib">
         <include name = "*.jar"/>
      </fileset>
   
   <pathelement path = "${build.dir}"/>
   </path>
    
   <target name = "javadoc">
      <javadoc packagenames = "faxapp.*" sourcepath = "${src.dir}" 
         destdir = "doc" version = "true" windowtitle = "Fax Application">

         <doctitle><![CDATA[<h1> =  Fax Application  =  </h1>]]></doctitle>
         <bottom><![CDATA[Copyright © 2011. All Rights Reserved.]]></bottom>
         <group title = "util packages" packages = "faxapp.util.*"/>
         <group title = "web packages" packages = "faxapp.web.*"/>
         <group title = "data packages" packages = "faxapp.entity.*:faxapp.dao.*"/>
      </javadoc>
   </target>

   <target name = "usage">
      <echo message = ""/>
      <echo message = "${name} build file"/>
      <echo message = "-----------------------------------"/>
      <echo message = ""/>
      <echo message = "Available targets are:"/>
      <echo message = ""/>
      <echo message = "deploy    --> Deploy application as directory"/>
      <echo message = "deploywar --> Deploy application as a WAR file"/>
      <echo message = ""/>
   </target>

   <target name = "build" description = "Compile main source tree java files">
   
      <mkdir dir = "${build.dir}"/>
      
      <javac destdir = "${build.dir}" source = "1.5" target = "1.5" debug = "true"
         deprecation = "false" optimize = "false" failonerror = "true">
         <src path = "${src.dir}"/>
         <classpath refid = "master-classpath"/>
      </javac>
   </target>

   <target name = "deploy" depends = "build" description = "Deploy application">
      <copy todir = "${deploy.path}/${name}" 
         preservelastmodified = "true">
         
         <fileset dir = "${web.dir}">
            <include name = "**/*.*"/>
         </fileset>
      </copy>
   </target>

   <target name = "deploywar" depends = "build" description =
      "Deploy application as a WAR file">
      
      <war destfile = "${name}.war" webxml = "${web.dir}/WEB-INF/web.xml">
         <fileset dir = "${web.dir}">
            <include name = "**/*.*"/>
         </fileset>
      </war>
      
      <copy todir = "${deploy.path}" preservelastmodified = "true">
         <fileset dir = ".">
            <include name = "*.war"/>
         </fileset>
      </copy>
   </target>

   <target name = "clean" description = "Clean output directories">
      <delete>
         <fileset dir = "${build.dir}">
            <include name = "**/*.class"/>
         </fileset>
      </delete>
   </target>

   <!-- ============================================================ -->
   <!-- Tomcat tasks -->
   <!-- ============================================================ -->

   <path id = "catalina-ant-classpath">
      <!-- We need the Catalina jars for Tomcat -->
      <!--  * for other app servers - check the docs -->
      
      <fileset dir = "${appserver.lib}">
         <include name = "catalina-ant.jar"/>
      </fileset>
   </path>

   <taskdef name = "install" classname = "org.apache.catalina.ant.InstallTask">
      <classpath refid = "catalina-ant-classpath"/>
   </taskdef>

   <taskdef name = "reload" classname = "org.apache.catalina.ant.ReloadTask">
      <classpath refid = "catalina-ant-classpath"/>
   </taskdef>

   <taskdef name = "list" classname = "org.apache.catalina.ant.ListTask">
      <classpath refid = "catalina-ant-classpath"/>
   </taskdef>

   <taskdef name = "start" classname = "org.apache.catalina.ant.StartTask">
      <classpath refid = "catalina-ant-classpath"/>
   </taskdef>

   <taskdef name = "stop" classname = "org.apache.catalina.ant.StopTask">
      <classpath refid = "catalina-ant-classpath"/>
   </taskdef>

   <target name = "reload" description = "Reload application in Tomcat">
      <reload url = "${tomcat.manager.url}"username = "${tomcat.manager.username}"
         password = "${tomcat.manager.password}" path = "/${name}"/>
   </target>
</project>


在这个例子中,我们使用Tomcat作为我们的应用服务器。首先,在构建属性文件中,我们定义了一些其他属性。

  • appserver.home 指向Tomcat应用程序服务器的安装路径。

  • appserver.lib 指向Tomcat中的库文件安装文件夹。

  • deploy.path 变量现在指向Tomcat中的webapp文件夹。

可以使用Tomcat管理器应用程序停止并启动Tomcat中的应用程序。管理器应用程序的URL,用户名和密码也在build.properties文件中指定。接下来,我们声明一个包含 catalina-ant.jar 的新CLASSPATH。这个jar文件是通过Apache Ant执行Tomcat任务所必需的。

catalina-ant.jar提供以下任务 :

Sr.No。属性&说明
1

InstallTask

安装Web应用程序。

类名:org.apache.catalina.ant.InstallTask

2

ReloadTask

重新加载网络应用程序。

类名:org.apache.catalina.ant.ReloadTask

3

ListTask

列出所有Web应用程序。

类名:org.apache.catalina.ant.ListTask

4

StartTask

启动Web应用程序。

类名:org.apache.catalina.ant.StartTask

5

StopTask

停止Web应用程序。

类名:org.apache.catalina.ant.StopTask

6

Reloa dTask

在不停止的情况下重新加载Web应用程序。

类名:org.apache.catalina.ant.ReloadTask

重装任务需要以下附加参数 :

  • 管理器应用程序的URL

  • 重启Web应用程序的用户名

  • 重启Web应用程序的密码

  • 要重新启动的Web应用程序的名称

让我们发出 deploy-war 命令将webapp复制到Tomcat webapps文件夹,然后让我们重新加载Fax Web应用程序。以下结果是运行Ant文件的结果 :

C:\>ant deploy-war
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 6.3 seconds

C:\>ant reload
Buildfile: C:\build.xml

BUILD SUCCESSFUL
Total time: 3.1 seconds


完成上述任务后,部署Web应用程序并重新加载Web应用程序。