本篇主要寫的是用ant來打包編譯一個動態的web項目,該項目是我以前寫的一個測試項目,用到的框架是struts2+hibernate,前臺界面很少就三個,後臺的代碼也不多,主要的就是回顧一下以前學過的struts2,然後練習一下剛接觸的hibernate和ant。項目的結構如下:
關於struts2和hibernate的環境搭建這裏就不說了,主要說的是用ant打包編譯該項目。本人是第一次接觸ant這個東西,用了將近一下午的時間才把這個項目給打包出來,說出來真是。。。。。。
下邊的是build.xml源碼:
<?xml version="1.0" encoding="UTF-8"?>
<project default="movewar" basedir=".">
<!-- 路徑信息 -->
<property name="classes" value="build/classes"/>
<property name="build" value="build"/>
<property name="lib" value="WebContent/WEB-INF/lib"/>
<property name="tomcathome" value="D:/workspace/tomcat6"></property>
<path id="weblib">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<!-- 刪除build文件夾 -->
<target name="del" description="init target">
<delete dir="${build}"></delete>
<echo>刪除build文件夾</echo>
</target>
<!-- 移動配置文件 -->
<target name="movepropertity" depends="del" description="">
<!-- 將配置文件移動到war包目錄下 -->
<copy todir="${build}/classes">
<fileset dir="src" id="propertityfile">
<include name="*.xml"/>
<include name="*.properties"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
<!-- 將pojo中的hibernate配置文件移動到war包對應目錄下 -->
<copy todir="${build}/classes/com/cpw/pojo">
<fileset dir="src/com/cpw/pojo" id="pojofile">
<include name="*.xml"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<!-- 編譯src文件夾下的java文件到classes文件夾下 -->
<target name="compile" depends="movepropertity" description="">
<mkdir dir="${build}/classes"/>
<javac srcdir="src" destdir="${classes}" encoding="UTF-8" includeantruntime="on">
<classpath refid="weblib"></classpath>
</javac>
<echo>編譯src文件夾下的java文件到classes文件夾下</echo>
</target>
<!-- 打war包 -->
<target name="war" depends="compile" description="">
<war destfile="${build}/test01.war" webxml="WebContent/WEB-INF/web.xml">
<lib dir="${lib}"/>
<classes dir="${classes}"/>
<fileset dir="WebContent"/>
</war>
<echo>打war包</echo>
</target>
<!-- 移動war包 -->
<target name="movewar" depends="war" description="movewar target">
<!-- 刪除tomcat下的項目文件夾和war包 -->
<delete file="${tomcathome}/webapps/test01.war"/>
<delete dir="${tomcathome}/webapps/test01"/>
<!-- 移動war包 -->
<copy todir="${tomcathome}/webapps">
<fileset file="${build}/test01.war"></fileset>
</copy>
<!-- 刪除原有編譯的war包 -->
<delete file="${build}/test01.war"/>
<echo>移動war包</echo>
</target>
</project>
對應的代碼都有相對應的註釋,我就說一下項目打包中遇到的問題。
1、編碼問題:
xml文件寫完後第一次運行就遇到了編碼問題,警告:編碼 GBK 的不可映射字符!我的全局編碼格式是UTF-8的,不可能出現gbk編碼,我就上網查了查解決方案,後來解決的方法是在<javac></javac>中添加了編碼聲明
encoding="UTF-8"
該問題解決!
2、jar包不存在:
編碼問題解決後接着打包,又提示“軟件包 XXXX 不存在”,上網查詢後發現需要在<javac></javac>中添加<classpath>標籤,並指明jar包的位置。於是我就用了一個<path>標籤聲明jar包位置,並在<javac>中添加<classpath>標籤
<path id="weblib">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<javac srcdir="src" destdir="${classes}" encoding="UTF-8" includeantruntime="on">
<classpath refid="weblib"></classpath>
</javac>
然後問題就解決了。
3、其他問題
後來打包編譯沒問題了,不過將war包拷貝到tomcat下後,運行的時候出問題了。原來是struts2和hibernate的配置文件沒有添加到war包中,
<!-- 將配置文件移動到war包目錄下 -->
<copy todir="${build}/classes">
<fileset dir="src" id="propertityfile">
<include name="*.xml"/>
<include name="*.properties"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
這段代碼是將struts2和hibernate的配置文件複製到war包的目錄下,後來又發現hibernate的pojo配置文件也忘了複製過去了,所以寫了下邊的代碼
<!-- 將pojo中的hibernate配置文件移動到war包對應目錄下 -->
<copy todir="${build}/classes/com/cpw/pojo">
<fileset dir="src/com/cpw/pojo" id="pojofile">
<include name="*.xml"/>
<exclude name="**/*.java"/>
</fileset>
</copy>
這樣一來運行就沒問題了。
經過這個項目的配置運行,對ant的使用也有了大概的瞭解和認識,在這裏貼出來和大家一起學習學習!