Ant部署Web程序至Tomcat容器【经验总结】
下面是我学习Ant编写的ant脚本,现分享如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="antDemo" default="tomcat.start" basedir=".">
<!-- 项目名 -->
<property name="webapp.name" value="${ant.project.name}"/>
<!-- tomcat根目录 -->
<property name="catalina.home" value="D:\apache-tomcat-6.0.18" />
<!-- tomcat项目部署目录 -->
<property name="catalina.apps" value="D:\apache-tomcat-6.0.18\webapps" />
<!-- 项目编译class文件存放目录 -->
<property name="compile.dir" location="${basedir}/WebRoot/WEB-INF/classes"/>
<!-- 项目源码文件夹 -->
<property name="src.dir" value="${basedir}/src"/>
<!-- 项目class文件jar包 -->
<property name="jar.dir" value="${basedir}/bin"/>
<!-- 项目lib存放目录 -->
<property name="lib.dir" value="${basedir}/WebRoot/WEB-INF/lib"/>
<!-- 项目Javadoc存放目录 -->
<property name="javadoc.dir" value="${basedir}/WebRoot/WEB-INF/doc"/>
<!-- 项目war包存放目录 -->
<property name="war.dir" value="${basedir}/WebRoot/WEB-INF/dist"/>
<!-- 项目部署后根目录 -->
<property name="deploy.dir" value="${catalina.apps}/${webapp.name}"/>
<!-- 项目包根目录 -->
<property name="package.dir" value="com.yida.*"/>
<!-- 是否调试 -->
<property name="debug" value="true"/>
<!-- tomcat properties-->
<property name="tomcat.manager.url" value=""/>
<property name="tomcat.manager.username" value="admin"/>
<property name="tomcat.manager.password" value="admin"/>
<!-- 编译依赖的第三方JAR-->
<path id="compile.classpath">
<fileset dir="${catalina.home}/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib.dir}">
<include name="**/*.jar"/>
</fileset>
</path>
<!-- 引用Tomcat内置任务依赖的jar-->
<path id="tomcat.ant.classpath">
<pathelement location="${catalina.home}/lib/catalina-ant.jar" />
</path>
<!-- 编译 -->
<target name="compile">
<delete dir="${compile.dir}"/>
<mkdir dir="${compile.dir}"/>
<javac srcdir="${src.dir}" destdir="${compile.dir}" encoding="UTF-8" debug="${debug}">
<classpath path="${compile.dir}" />
<classpath refid="compile.classpath"/>
</javac>
<copy todir="${compile.dir}">
<fileset dir="${src.dir}" >
<include name="**/*.xml"/>
</fileset>
</copy>
</target>
<!-- 生成Javadoc文档-->
<target name="javadoc" depends="compile">
<delete dir="${javadoc.dir}" deleteonexit="true" includeEmptyDirs="true" failonerror="false"/>
<mkdir dir="${javadoc.dir}"/>
<javadoc packagenames="${package.dir}" sourcepath="${src.dir}" destdir="${javadoc.dir}" author="true" version="true" use="true" splitindex="true" windowtitle="${webapp.name} API" doctitle="${webapp.name}" encoding="UTF-8">
<classpath refid="compile.classpath" />
</javadoc>
</target>
<!-- 打包成WAR包-->
<target name="war" depends="compile">
<delete dir="${war.dir}" deleteonexit="true" includeEmptyDirs="true" failonerror="false"/>
<mkdir dir="${war.dir}"/>
<war destfile="${war.dir}/${webapp.name}.war" webxml="WebRoot/WEB-INF/web.xml">
<classes dir="${compile.dir}"/>
<lib dir="${lib.dir}"/>
<dirset dir="${basedir}/WebRoot">
<include name="WEB-INF/tags"/>
<include name="WEB-INF/lib"/>
<exclude name="WEB-INF/doc,WEB-INF/dist,bin"/>
</dirset>
<fileset dir="${basedir}/WebRoot/">
<include name="**/*.jsp"/>
<include name="**/*.css"/>
<include name="**/*.js"/>
<include name="**/*.xml"/>
<include name="**/*.jpg"/>
<include name="**/*.gif"/>
<include name="**/*.png"/>
<include name="**/*.tld"/>
<exclude name="**/*.html,**/*.htm,**/*.war"/>
</fileset>
</war>
</target>
<!-- 解压war包-->
<!--
<target name="unpackwar" depends="deploy">
<delete dir="${catalina.apps}/${webapp.name}" deleteonexit="true" includeEmptyDirs="true" failonerror="false"/>
<unzip src="${catalina.apps}/${webapp.name}.war" dest="${catalina.apps}/${webapp.name}" />
<delete file="${catalina.apps}/${webapp.name}.war" />
</target>
-->
<!-- 打包jar-->
<target name="jar" depends="compile">
<jar jarfile="${jar.dir}/${webapp.name}.jar">
<fileset dir="${compile.dir}">
<include name="**/*.class"/>
</fileset>
</jar>
</target>
<!-- 项目部署deploy -->
<target name="deploy" depends="war,tomcat.start">
<deploy url="${tomcat.manager.url}"
username="${tomcat.manager.username}"
password="${tomcat.manager.password}"
path="/${webapp.name}"
war="file:${war.dir}/${webapp.name}.war" />
</target>
<!-- 项目移除undeploy -->
<target name="undeploy" depends="tomcat.stop">
<delete>
<fileset dir="${catalina.apps}">
<include name="**/*.war"/>
</fileset>
</delete>
<delete dir="${deploy.dir}"></delete>
</target>
<!-- 启动Tomcat -->
<target name="tomcat.start" description="Start Tomcat">
<exec dir="${catalina.home}/bin" executable="cmd.exe">
<env key="CATALINA_HOME" path="${catalina.home}"/>
<arg value="/c startup.bat"/>
</exec>
</target>
<!-- 调试模式启动Tomcat -->
<!--
<target name="tomcat.debug">
<java jar="${catalina.home}/bin/bootstrap.jar" fork="true">
<jvmarg value="-Dcatalina.home=${catalina.home}"/>
<jvmarg value="-Xdebug"/>
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"/>
</java>
</target>
-->
<!-- 重启Tomcat -->
<target name="tomcat.reload" description="reload tomcat">
<ant target="tomcat.stop"></ant>
<sleep seconds="2"></sleep>
<ant target="tomcat.start"></ant>
</target>
<!-- 关闭Tomcat -->
<target name="tomcat.stop" description="Stop tomcat">
<exec dir="${catalina.home}/bin" executable="cmd.exe">
<env key="CATALINA_HOME" path="${catalina.home}"/>
<arg value="/c shutdown.bat"/>
</exec>
</target>
<!--
<target name="tomcat.stop">
<java jar="${catalina.home}/bin/bootstrap.jar" fork="true">
<jvmarg value="-Dcatalina.home=${catalina.home}"/>
<arg line="stop"/>
</java>
</target>
-->
<!-- 引用tomcatTasks.properties配置文件 -->
<!--
<taskdef file="tomcatTasks.properties">
<classpath>
<pathelement path="${catalina.home}/lib/catalina-ant.jar"/>
</classpath>
</taskdef>
-->
<!-- 引用Tomcat内置任务 -->
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" classpathref="tomcat.ant.classpath"/>
<!--
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" />
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask" />
<taskdef name="start" classname="org.apache.catalina.ant.StartTask" />
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask" />
<taskdef name="stop" classname="org.apache.catalina.ant.StopTask" />
<taskdef name="install" classname="org.apache.catalina.ant.InstallTask" />
<taskdef name="remove" classname="org.apache.catalina.ant.RemoveTask" />
<taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask" />
<taskdef name="roles" classname="org.apache.catalina.ant.RolesTask" />
<taskdef name="list" classname="org.apache.catalina.ant.ListTask" />
-->
</project>
以上代码本人已经测试过N遍,保证能正常运行,还有点疑问的是,用ant来启动Tomcat,若tomcat已经启动再次运用ant启动tomcat会抛异常,我不知道如何在ant脚本里判断tomcat的启动状态,还有就是fileset和dirset批量过滤时,include貌似不支持逗号分割,我试过N遍,就是没测试出来效果,如果有谁知道上面两个问题的朋友,请告知我一声,谢谢!
据我了解,Ant还有很多内置任务可以供调用,如native2ascii资源文件国际化时需要用到它,javac编译 java运行 jar、 war、
copy、move、mkdir、delete、sql执行sql语句 echo控制台打印 exec执行dos命令等等,当然还包括一些第三方的任务,如tomcat提供的一些start启动 stop停止 reload重启 deploy部署 undeploy移除部署,而且你还可以自定义任务,自定义任务很简单,只需要编写一个带有一个execute()方法的Java类就行了。是不是很简单,然后ant脚本里运用taskdef引用自定义任务,比如:<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask" />
name就是你为你自定义任务取什么名称,classname就是你的任务实现类,包含完整包名,如果你其他地方调用该任务,只需<yourTaskname即可,如果你的任务类引用了其他第三方的类库jar,只需先定一个path元素,fileset里指定依赖的jar路径,然后taskdef的classpathref属性引用该path的id即可。是不是感觉so easy啊?ant的强大不是只字片语能说明的,我了解到的也只是冰山一角。其他的功能以后用到在研究,(*^__^*) 嘻嘻!
本文来源 我爱IT技术网 http://www.52ij.com/jishu/98.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
