前言:如题所示,有时我们可能经常需要把JavaWeb项目进行编译,然后打包成war包并发布到Tomacat中进行测试。如果每次都人工进行操作的话,无疑是很麻烦的。这时我们可以通过编写一个自动化的Ant脚本,每次需要发布项目时只需要点击一下就可以完成了,非常方便

测试项目的项目结构如下:

wKioL1djQ0fzUik8AABOAu2sOQU464.png

Ant脚本build_war.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="antwar" default="publish" basedir=".">
	<!-- 打包生成的war名字 -->
	<property name="war.name" value="Internationalisation" />

	<!-- java源文件路径 -->
	<property name="src.dir" value="${basedir}/src" />

	<!-- webapp路径 -->
	<property name="webapp.dir" value="${basedir}/WebContent" />

	<!-- jar包路径 -->
	<property name="lib.dir" value="${webapp.dir}/WEB-INF/lib" />

	<!-- 编译源文件路径 -->
	<property name="build.bin" value="${basedir}/AntBuild/bin" />

	<!-- 准备webapp文件路径 -->
	<property name="buildwar.dest" value="${basedir}/AntBuild/warsrc" />

	<!-- 打包war文件路径 -->
	<property name="war.dest" value="${basedir}/AntBuild/war" />

	<!-- tomcat路径 -->
	<property name="tomcat.home" value="D:\\apache-tomcat-7.0.68" />

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

	<!-- 初始化 -->
	<target name="init">
		<mkdir dir="${build.bin}" />
		<mkdir dir="${buildwar.dest}" />
		<mkdir dir="${war.dest}" />

		<!-- 复制静态文件 -->
		<copy todir="${buildwar.dest}" overwrite="true">
			<fileset dir="${webapp.dir}">
				<exclude name="/WEB-INF/classes/**" />
			</fileset>
		</copy>
	</target>

	<!-- 编译源文件 -->
	<target name="compile" depends="init">
		<echo message="Build: " />
		<javac srcdir="${src.dir}" destdir="${build.bin}" encoding="utf-8" includeantruntime="">
			<classpath refid="classpath" />
		</javac>

		<!-- 复制编译后的文件 -->
		<copy todir="${buildwar.dest}/WEB-INF/classes" overwrite="true">
			<fileset dir="${build.bin}">
				<include name="**/*.class" />
			</fileset>
		</copy>
	</target>

	<!-- 复制项目中的其他的一些资源文件 -->
	<target name="copyResource" depends="compile">
		<echo message="Copy resources: " />
		<copy todir="${buildwar.dest}/WEB-INF/classes" overwrite="true">
			<fileset dir="${basedir}/resources">
				<include name="**/*.*" />
			</fileset>
		</copy>
	</target>

	<!-- 打war包 -->
	<target name="build.war" depends="copyResource">
		<echo message="Build war: " />
		<war warfile="${war.dest}/${war.name}.war" webxml="${buildwar.dest}/WEB-INF/web.xml">
			<fileset dir="${buildwar.dest}" />
		</war>
	</target>

	<!-- 发布到tomcat -->
	<target name="publish" depends="build.war">
		<!-- 删除tomcat已发布的项目文件 -->
		<delete dir="${tomcat.home}/webapps/${war.name}" />
		<delete file="${tomcat.home}/webapps/${war.name}.war" />

		<!-- 复制war文件到${tomcat.home}/webapps -->
		<copy todir="${tomcat.home}/webapps" overwrite="true">
			<fileset dir="${war.dest}">
				<filename name="${war.name}.war" />
			</fileset>
		</copy>

		<!-- 清除临时文件 -->
		<delete dir="${build.bin}" />
		<delete dir="${buildwar.dest}" />
		<delete dir="${war.dest}" />

	</target>

</project>

注: