因为是一个老项目,依赖的包很混乱,没有办法使用 Maven 打包,所以只好又重拾起 Ant 工具咯。
因为 IDEA 自带 Ant 插件,所以我们只需要编写一个 build.xml 文件即可。
打包规则如下:
1. 清理 build 文件夹。
2. 定义 lib 路径,即依赖包路径(因为是 Web 项目,所以里面也依赖了 Tomcat 的 lib 文件夹)。
3. 编译。
下面是 build.xml 的内容:
<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="warTest" basedir=".">
<!-- ****************** 根据实际项目可变参数【开始】 ***************************** -->
<!-- 源代码路径 -->
<property name="src" value="${basedir}/src.java.main"></property>
<!-- resource 路径 -->
<property name="resource"
value="${basedir}/src.main.resource"></property>
<!-- webContent 路径 -->
<property name="webContent"
value="${basedir}/src.java.webapp"></property>
<!-- war 文件名称 -->
<property name="warFile" value="order.war"></property>
<!-- tomcat 所在路径 -->
<property name="tomcat" value="C:\Program Files (x86)\apache-tomcat-8.0.36"/>
<!-- ****************** 根据实际项目可变参数【结束】 ***************************** -->
<!-- WEB-INF 路径 -->
<property name="webInf"
value="${webContent}/WEB-INF"></property>
<!-- build 文件夹路径 -->
<property name="buildPath" value="${basedir}/build"></property>
<!-- war 文件所在路径 -->
<property name="warFilePath" value="${buildPath}/${warFile}"></property>
<!-- lib 文件夹所在路径 -->
<property name="lib" value="${webInf}/lib"></property>
<!-- 清理:删除原有的 build 文件夹,并创建一个新的 build 文件夹 -->
<target name="clean">
<delete dir="${buildPath}"/>
<mkdir dir="${buildPath}"/>
</target>
<!-- 定义 lib 路径 -->
<path id="project.lib">
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${tomcat}\lib">
</fileset>
</path>
<!-- 编译:编译 src 文件夹中的 java 文件,把编译后的 class 文件放到创建的文件夹下 -->
<target name="compile" depends="clean">
<javac srcdir="${src}" destdir="${buildPath}" includeantruntime="false">
<classpath refid="project.lib">
</classpath>
</javac>
</target>
<!-- 拷贝资源文件-->
<target name="copyResource">
<copy todir="${webInf}/classes">
<fileset dir="${resource}">
<include name="**/**.*"/>
</fileset>
</copy>
</target>
<!-- 打测试环境的 war 包 -->
<target name="warTest" depends="compile,copyResource">
<!-- 删除原有的 war包 -->
<delete dir="${warFilePath}"/>
<!-- 打新的 war包 -->
<war destfile="${warFilePath}" webxml="${webInf}/web.xml">
<!-- 将非 jar和非 class文件拷贝到 war 包的对应路径下 -->
<fileset dir="${webContent}">
<include name="**/**.*"/>
<exclude name="**/*.jar"/>
<exclude name="**/*.class"/>
</fileset>
<!-- 将 jar 和 class文件拷贝到 war包的对应路径下。 -->
<lib dir="${lib}"/>
<classes dir="${buildPath}"/>
</war>
</target>
<!-- 拷贝 war 包到 tomcat-->
<target name="copyWarToTomcat">
<copy todir="${tomcat}/webapps" file="${warFilePath}"/>
</target>
<!-- 停止 tomcat-->
<target name="stopTomcat">
<exec executable="cmd" dir="${tomcat}/bin" failonerror="false"
append="true">
<env key="CATALINA_HOME" path="${tomcat}"/>
<arg value="/c shutdown.bat"/>
</exec>
</target>
<!-- 启动 tomcat -->
<target name="startTomcat" depends="copyWarToTomcat">
<exec executable="cmd" dir="${tomcat}/bin" failonerror="false"
append="true">
<env key="CATALINA_HOME" path="${tomcat}"/>
<arg value="/c startup.bat"/>
</exec>
</target>
</project>
说明:
- 【根据实际项目的可变参数】段落,是需要依据实际情况进行配置的,其他的部分可以不变。
- 脚本中还加入了【启动 tomcat】与【停止 tomcat】的脚本任务。【启动 tomcat】的任务会先把之前打好的 WAR 包拷贝到 tomcat 的 webapps 文件夹下,然后再启动。
[fix] 添加拷贝资源文件。2018-1-22