使用Ant自动化发布web工程

  通常在web应用程序需要上线或测试时通常需要部署到类似于tomcat、jboss、weblogic或webspare这些web服务器中,为避免手动部署带来的操作繁琐、易出错等问题,这里使用ant进行标准化部署,这里我的web服务器采用了Nginx+Tomcat集群,so,需要编写的ant脚本如下:

  

<?xml version="1.0" encoding="UTF-8"?>
<project name="oprmonitor-user" basedir="." default="redeploy">

    <!-- 系统环境配置 -->
    <property environment="env" />
    <!-- 源码路径 -->
    <property name="src.dir" value="${basedir}/src" />
    <!-- 编译路径 -->
    <property name="dist.dir" value="${basedir}/dist" />
    <!-- 静态资源路径 -->
    <property name="web.root.dir" value="${basedir}/WebRoot" />
    <!-- 当前工程类路径 -->
    <property name="lib.dir" value="${basedir}/WebRoot/WEB-INF/lib" />
    <!-- 部署描述符路径 -->
    <property name="web.xml.dir" value="${basedir}/WebRoot/WEB-INF/web.xml" />
    <!-- War包名称 -->
    <property name="war.name" value="oprmonitor-user" />
    <!-- Tomcat路径 -->
    <property name="tomcat.dir" value="D:/soft/apache/apache-tomcat-7.0.67" />
    <!-- Tomcat可执行脚本路径 -->
    <property name="tomcat.bin.dir" value="${tomcat.dir}/bin" />
    <!-- Tomcat发布应用路径 -->
    <property name="tomcat.webapps.dir" value="${tomcat.dir}/webapps" />
    <!-- Tomcat发布日志路径 -->
    <property name="tomcat.logs.dir" value="${tomcat.dir}/logs" />
    <!-- 当前时间 -->
    <tstamp>
        <format property="current.time" pattern="yyyyMMddHHmmss" locale="zh" />
    </tstamp>

    <path id="build-classpath">
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>

    <target name="init" description="验证操作系统">
        <echo>验证操作系统...</echo>
        <echo>${os.name}</echo>
        <echo>验证操作系统完成</echo>
    </target>

    <target name="clean" depends="init" description="清除旧的编译文件">
        <echo>正在清除旧的编译文件...</echo>
        <delete dir="${dist.dir}" />
        <mkdir dir="${dist.dir}" />
        <echo>清除旧的编译文件完成</echo>
    </target>

    <target name="compile" depends="clean" description="编译源码">
        <echo>正在编译源码...</echo>
        <javac srcdir="${src.dir}" destdir="${dist.dir}"
            includeantruntime="false">
            <compilerarg line="-encoding UTF-8" />
            <classpath refid="build-classpath" />
        </javac>
        <echo>编译源码完成</echo>
    </target>

    <target name="generate-war" depends="compile" description="生成War包">
        <echo>正在生成War包...</echo>
        <delete dir="${basedir}/${war.name}.war" />
        <war destfile="${basedir}/${war.name}.war" webxml="${web.xml.dir}"
            excludes="*.svn">
            <fileset dir="${web.root.dir}">
                <include name="**/**.*" />
                <exclude name="**/*.jar" />
                <exclude name="**/*.class" />
            </fileset>
            <lib dir="${lib.dir}" />
            <classes dir="${dist.dir}" />
        </war>
        <echo>生成War包完成</echo>
    </target>

    <target name="stop-tomcat" depends="generate-war" description="停止Tomcat">
        <echo>正在关闭Tomcat...</echo>
        <exec executable="${tomcat.bin.dir}/shutdown.bat" failonerror="false"
            output="${tomcat.logs.dir}/log.txt" append="true">
            <env key="CATALINA_HOME" path="${tomcat.dir}" />
            <arg value="/c shutdown.bat" />
        </exec>
        <!-- 检测tomcat的URL是否访问失败(用not标签),访问失败则认为tomcat已经关闭 -->
        <waitfor maxwait="5" maxwaitunit="minute" checkevery="5">
            <not>
                <http url="http://localhost:8080/" />
            </not>
        </waitfor>
        <echo>关闭Tomcat完成</echo>
    </target>

    <target name="old-war-exist-check" depends="stop-tomcat"
        description="检查旧的同名War包是否存在">
        <echo>检查旧的同名War包是否存在...</echo>
        <available file="${tomcat.dir}/webapps/${war.name}.war"
            property="old-war-isexist" />
    </target>

    <target name="backup-old-war" depends="old-war-exist-check" if="old-war-isexist"
        description="如果旧的同名War包存在则备份">
        <echo>旧的同名war包[存在],开始备份...</echo>
        <copy tofile="${tomcat.dir}/webapps/${war.name}.war.bak.${current.time}">
            <fileset file="${tomcat.dir}/webapps/${war.name}.war" />
        </copy>
        <echo>旧的同名war包[存在],备份完成</echo>
    </target>

    <target name="delete-old-war" depends="backup-old-war" if="old-war-isexist"
        description="如果旧的同名War包备份完成后则删除">
        <echo>删除旧的同名war包...</echo>
        <delete file="${tomcat.dir}/webapps/${war.name}.war" />
        <echo>删除旧的同名war包完成</echo>
        <echo>删除旧的同名war已解压工程...</echo>
        <delete dir="${tomcat.dir}/webapps/${war.name}" />
        <echo>删除旧的同名war已解压工程完成</echo>
    </target>

    <target name="copy-new-war-into-webapps" depends="delete-old-war"
        description="把新的War包复制到Tomcat的webapps中">
        <echo>复制新的War包到tomcat的webapps目录下...</echo>
        <copy tofile="${tomcat.webapps.dir}/${war.name}.war">
            <fileset file="${basedir}/${war.name}.war" />
        </copy>
        <echo>复制新的War包到tomcat的webapps目录下完成</echo>
    </target>

    <target name="start-tomcat" depends="copy-new-war-into-webapps"
        description="启动Tomcat">
        <echo>正在启动Tomcat...</echo>
        <exec executable="${tomcat.bin.dir}/startup.bat" failonerror="false"
            vmlauncher="false" output="${tomcat.logs.dir}/log.txt" append="true">
            <env key="CATALINA_HOME" path="${tomcat.dir}" />
            <arg value="/c startup.bat" />
        </exec>
        <!-- 检测tomcat的URL是否可以访问成功,访问成功则认为tomcat启动完成 -->
        <waitfor maxwait="5" maxwaitunit="minute" checkevery="5">
            <http url="http://localhost:8080/" />
        </waitfor>
        <echo>启动Tomcat完成</echo>
    </target>

    <target name="redeploy" depends="start-tomcat" description="自动发布">
        <echo>发布完成</echo>
    </target>

</project>
时间: 2024-08-25 05:55:45

使用Ant自动化发布web工程的相关文章

项目构建之maven篇:8.maven发布web工程及基于spring mvc,jetty实现的用户管理demo

web工程目录结构 pom/pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&qu

使用ant编译发布web项目

本文就不对ant进行详细介绍,直接对一个实际项目的自动构建和部署等进行说明. build.xml 内容主要分为2部分:项目编译库的配置 和 项目自动构建部署的编写 1.配置项目编译库classpath(文章底部贴出来的例子 build.xml 文件中,对编译库的配置写的不好,大家使用中参考下面这段代码这样写会比较清晰.) <!-- ClassPath configuration setting --> <!-- J2EE库 --> <path id="J2EE.li

eclipse 发布web工程,修改tomcat端口

如果想修改tomcat发布的端口,有两种方法: 1.用记事本打开tomcat安装目录下的conf文件夹下的server.xml,找到<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 把8080改成80,然后启动tomcat的服务就行了,要确保80端口没有被占用,否则会报错的. 2.如

java web工程发布以及解决tomcat闪退

1.tomcat闪退 a.环境变量错误 startup.bat最后假如PAUSE进入调试状态,双击startup.bat,可以看到错误,根据错误提示设置相应的环境变量,JAVA_HOME等. b.eclispe设置问题,当eclispe server locations选项为第一项时,tomcat无法独立运行,由于本人学术不精,只定位出问题所在,还望大神帮答问题所在原因. 2.eclipse发布web工程 a.将server locations设置为可配状态 右键server,选择Add and

利用Inotify和Rsync将web工程文件自动同步到多台应用服务器

背景:需要搭建一套跟线上一模一样的环境,用来预发布,这是其中的web分发的一个小模块的实现过程. 1 工具以及环境简介 1.1,Inotify工具 Inotify,它是一个内核用于通知用户空间程序文件系统变化的机制.众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如hotplug.udev 和 ino

Jrebel简单的热部署一个web工程

前言:博主最近在做Hybris开发,漫长的启动时间大大的拖累了项目的进度,而Jrebel的出现就是为了减少项目重启的时间或者说修改了代码后直接不用重启就可以看到修改的结果,但是Hybris的部署一直没有成功,博主就先做了一个小demo,试试看效果如何. 第一步:在线安装IDEA Jrebel插件 第二步:注册Jelbel获得序列号       这里博主是通过去Jrebel的官网 https://my.jrebel.com,FQ通过推特账号登录获取到的他的激活序列号的,但是我看到网上有一些破解的,

Ant自动化构建Andriod项目详解

因工作需要,最近一直在用ant实现各android工程的自动化构建.在编写自动化构建脚本过程中遇到了各种各样的坑,在逐一跳坑的过程中,也对ant的自动化构建过程也有了较为深入的了解.本文将着重介绍android平台下如何使用ant自动化编译打包apk, 及在使用过程中的遇到的问题和解决方式,希望能够对大家有所帮助. 1.      简单了解下Ant 1.1.    什么是 Ant: Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中

项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程

之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估计血压爆表了. 对于大点的java web项目,我们需要用到Tomcat 9.0 M10,gradle 3.2.1,IntelliJ 来搞定这一档子事. 1.软件下载安装,见<项目自动化建构工具gradle 入门0--环境 & 废话>. 2.打开IntelliJ,File -> Ne

【ASP】Win2003下IIS的配置,并且把WEB工程发布到网络

一.IIS的安装 1.首先打开Windows2003的控制版面,查看是否有"管理工具",没有也不要紧,点击"添加或删除程序".有的话,可以直接进入第二步,IIS的配置. 2.在弹出的窗口,选择添加/删除Windows组件的功能,选择把"网络服务"组件与"应用程序服务器"的组件勾上,一般情况,单纯勾上这两个组件还不行,还要打开"应用程序服务器"组件的详细信息,把里面能勾的都勾上,如果勾上只是出现灰色小勾,那么