Ant+Tomcat自动部署
今天研究对象是Ant,用于对msms系统进行Tomcat的自动部署。遇到一个怪问题,百思不得其解:
通过ant depoly可以把msms.war部署到tomcat上。当然,要求这时候webapps下面没有msms目录。
看tomcat的纪录,加载msms.war正常,网页也可以打开。
通过ant undeploy,可以把msms卸载。Tomcat显示:
Undeploying context [/msms]
正常卸载了。问题是,去看webapps目录下面,居然有一个msms目录的残骸,里面保留的目录是
WEB-INF\lib
有以下几个文件残留着:
commons-digester.jar
commons-validator.jar
struts.jar
这时候msms目录也无法手工删除,必须停掉tomcat后才能删除。
我装的tomcat是5.5。不知道是否还有人遇到过这种情况,我反正是晕了。
build.properties文件如下:
tomcat.dir=C:/ApacheGroup/Tomcat5.5
tomcat.webapps=C:/ApacheGroup/Tomcat5.5/webapps
tomcat.manager.url=http://localhost:8080/manager
tomcat.manager.username=admin
tomcat.manager.password=xxxxxxxx
build.xml文件如下:
<?xml version="1.0"?>
<project name="msms" default="compile" basedir=".">
<!-- Ant Tomcat Task Definition -->
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="install" classname="org.apache.catalina.ant.InstallTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="start" classname="org.apache.catalina.ant.StartTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="stop" classname="org.apache.catalina.ant.StopTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<property name="build" value="build" />
<property name="dist" value="dist" />
<property name="src" value="src/java" />
<property name="test" value="src/test" />
<property name="war-config" value="src/config" />
<property name="report" value="report" />
<property name="lib" value="lib" />
<property name="web" value="web" />
<property name="meta" value="meta" />
<property name="context-path" value="${ant.project.name}" />
<property file="build.properties" />
<path id="build.classpath">
<fileset file="${lib}/*.jar" />
<fileset dir="${tomcat.dir}/common/lib">
<include name="*.jar" />
</fileset>
<fileset dir="${tomcat.dir}/common/endorsed">
<include name="*.jar" />
</fileset>
<pathelement path="${build}" />
</path>
<!-- Hibernate Tool Task Definition -->
<taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask" classpathref="build.classpath" />
<target name="clean">
<echo message="Cleaning up the build and dist directories" />
<delete dir="${build}" />
<mkdir dir="${build}" />
<delete dir="${dist}" />
<mkdir dir="${dist}" />
</target>
<target name="copy-resources">
<copy todir="${build}">
<fileset dir="${src}">
<exclude name="**/*.java" />
<exclude name="**/*.hbm.xml" />
</fileset>
</copy>
</target>
<target name="compile" depends="copy-resources">
<javac destdir="${build}" srcdir="${src}:${test}">
<classpath refid="build.classpath" />
</javac>
</target>
<target name="initdb" depends="compile">
<hibernatetool destdir="${build}">
<classpath>
<path location="${build}" />
</classpath>
<annotationconfiguration configurationfile="src/java/hibernate.cfg.xml" />
<hbm2ddl create="true" />
</hibernatetool>
</target>
<target name="run" depends="compile">
<java fork="true" classname="cn.ac.rcpa.msms.tools.ProjectManager" classpathref="build.classpath">
<classpath path="${build}" />
<arg value="${action}" />
<arg value="${project}" />
<arg value="${description}" />
</java>
</target>
<target name="test" depends="compile" description="run junit test">
<delete dir="${report}" />
<mkdir dir="${report}" />
<junit dir="." fork="true" printsummary="on" haltonfailure="false" failureproperty="tests.failed" showoutput="true">
<classpath refid="build.classpath" />
<formatter type="brief" />
<batchtest todir="${report}">
<fileset dir="${build}">
<include name="**/*Test.*" />
<include name="**/Test*.*" />
</fileset>
</batchtest>
</junit>
<fail if="tests.failed">
***********************************************************
**** One or more tests failed! Check the output ... ****
***********************************************************
</fail>
</target>
<target name="create-war" depends="clean, compile" description="build release war">
<echo message="creation the WAR file...${context-path}.war" />
<war destfile="${dist}/${context-path}.war" webxml="${meta}/web.xml">
<classes dir="${build}">
<exclude name="**/*Test.*" />
<exclude name="**/Test*.*" />
<exclude name="hibernate.cfg.xml" />
</classes>
<lib dir="${lib}" />
<fileset dir="${web}" />
<zipfileset dir="${war-config}" prefix="WEB-INF/classes" />
</war>
<!-- <scp file="${dist}/${context-path}.war" todir="root:${password}@172.16.1.20:/usr/local/tomcat/webapps" trust="true" /> -->
</target>
<target name="deploy" description="Install application in Tomcat">
<deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" localWar="file:${dist}/${context-path}.war" />
</target>
<target name="undeploy" description="Remove application in Tomcat" if="already.deployed">
<undeploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
</target>
<target name="reload" description="Reload application in Tomcat">
<reload url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
</target>
<target name="start" description="Start Tomcat application">
<start url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
</target>
<target name="stop" description="Stop Tomcat application">
<stop url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" />
</target>
<target name="list" description="List Tomcat applications">
<list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
</target>
<target name="deploy-application" description="Compile the web application...">
<echo message="Undeploying the application only if it's deployed..." />
<available file="${tomcat.webapps}/${context-path}.war" property="already.deployed" />
<antcall target="undeploy" />
<antcall target="create-war" />
<antcall target="deploy" />
</target>
</project>
只有Windows上才会有的问题,
创建META-INF目录, 在目录里新建context.xml,加入如下内容
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true" antiResourceLocking="true">
</Context>
不过,deploy到两台linux服务器上倒都成功了。
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<taskdef name="list" classname="org.apache.catalina.ant.ListTask">
<classpath>
<path location="${tomcat.dir}/server/lib/catalina-ant.jar" />
</classpath>
</taskdef>
<target name="deploy-web" description="Install application in Local Tomcat">
<echo message="deploying to web ..." />
<deploy url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="/${context-path}" war="file:${dist}/${context-path}.war" update="true" />
</target>
<target name="list-web">
<echo message="list web tomcat ..." />
<list url="http://172.16.1.20:8080/manager" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
</target>
这里跟昨天的代码有一点不一样:
1、localWar改成了war。
原来更新远程服务器的时候,总是显示更新成功,但是到webapps目录下总是没有相应的war文件,通过调用
ant list-web
发现,有一个context-path是dist/msms,而且是stop状态。哦,原来localWar的意思不是指开发的机器的local path,而是指把这个war被写到服务器的什么地方。改成war就正常了。
2、不需要判断是否已经deploy进而调用undeploy了,直接通过update="true"更新就可以了。
posted on 2006-11-23 08:59 捕风 阅读(4139) 评论(1) 编辑 收藏 所属分类: java高级
相关推荐
4. "Eclipse中自动通过ant脚本把web应用部署到tomcat中.doc":这将涉及如何在Eclipse这样的IDE中配置和运行Ant脚本,以便于快速将Web应用部署到本地或远程的Tomcat服务器上。 在实际开发中,Ant可以执行一系列任务...
基于【jmeter+jenkins+ant+tomcat】的自动化测试框架可以帮助我们高效地进行性能测试。 **JMeter** 是一个开源的、跨平台的性能测试工具,专门用于测试Web应用性能和负载。它可以模拟多个用户并发访问服务,从而...
在这个场景中,Jenkins会监控源代码仓库,一旦检测到新的提交,就自动启动Ant进行构建,然后使用JMeter进行性能测试,最后将通过测试的版本部署到Tomcat服务器上。 在Linux环境下搭建这个环境,首先需要安装JDK,...
标题 "Hudson+Ant+SVN+Tomcat实现快速构建(一)" 涉及的是在软件开发中使用一系列工具进行自动化构建的过程。这个过程是持续集成的一部分,旨在提高开发效率,确保代码质量,并减少错误。以下是这些工具在构建流程...
标题中的“ant远程上传并部署tomcat”是指使用Apache Ant工具执行自动化构建任务,将本地的Web应用(如WAR或EAR文件)传输到远程Linux服务器的Tomcat应用服务器上进行部署,并随后重启Tomcat服务以使更改生效。Ant是...
总结来说,Ant远程部署Tomcat脚本是通过XML配置文件定义了一系列的任务,这些任务能够自动完成Web应用的打包、停服、卸载和部署,极大地提高了开发和运维的效率。正确配置脚本中的URL、用户名、密码以及上下文路径等...
- **发布与部署**:构建成功后,可以将应用部署到Tomcat服务器上,这通常通过Jenkins的发布插件实现,自动将war包复制到Tomcat的webapps目录下。 - **持续监控**:通过Jenkins的仪表板,可以查看构建历史、测试报告...
重启Tomcat后,Web服务将自动部署并可供访问。 11. **访问Web服务**: 通过HTTP请求调用部署好的Web服务,例如使用 Axis2 提供的客户端工具或者自定义客户端代码来测试服务功能。 总结来说,这个过程涵盖了开发、...
在IT行业中,Ant和Tomcat是两个非常关键的组件,分别用于构建和部署Java应用程序。Ant是一个基于XML的构建工具,而Tomcat则是一个流行的开源Servlet容器。本篇将详细介绍如何使用Ant编译Tomcat源码,以及如何在...
Jenkins是一款流行的开源自动化服务器,用于自动化各种任务,包括构建、测试和部署软件。它可以集成许多测试工具和报告插件,包括Ant和TestNG,以及生成测试报告的ReportNG插件。Ant是一个基于Java的构建工具,用于...
在提供的文件名中,"ant部署tomcat.txt"可能是记录整个Ant部署流程的文档,"ant复制svn部署到tomcat.txt"可能详细阐述了如何利用Ant与SVN交互并部署到Tomcat的过程,而"ant部署tomcat涉及svn.txt"则可能专门讨论了...
标题 "pluto2+tomcat6+window應用部署配置詳解" 涉及到的是在Windows操作系统上,使用Pluto Portal Server 2(一个portlet容器)与Apache Tomcat 6(一个流行的Java应用服务器)进行应用部署和配置的过程。...
4. **项目部署**:利用Ant将Web应用部署到Tomcat服务器,包括发布WAR文件到Tomcat的webapps目录,或者使用Tomcat的管理工具进行远程部署。 5. **版本控制与团队协作**:介绍如何将Eclipse、Tomcat和Ant的配置纳入...
综合以上,我们可以构建一个完整的流程:使用ANT自动化构建Java项目,同时通过SVN管理代码版本,然后将构建好的应用部署到Nginx+Tomcat的架构中,实现负载均衡和Session共享。这样的架构不仅提高了系统的可用性和...
2. **Jenkins**: Jenkins 是一个开源的持续集成(CI)服务器,用于自动化软件开发中的各种任务,如构建、测试和部署。 3. **Ant**: Apache Ant 是一个 Java 库和命令行工具,其任务是驱动构建过程,这是一个软件项目的...
2. 使用ant命令处理axis2\webapp目录下的build.xml文件,生成axis2.war文件,然后将其复制到Tomcat的webapps目录下。启动Tomcat,通过浏览器访问http://127.0.0.1:8080/axis2,如果看到axis2的欢迎页面,说明axis2已...