web項目ant打包完整案例

========================================================================================================
                                                            web項目ant打包完整案例
========================================================================================================


 
 前兩週做的web項目要部署到服務器上去,爲了後續升級部署方便,決定採用Ant進行(開發用的myeclipse 8.5),ant打包測試也是在myeclipse上進行,build.xml測試完成後地通過本地配置的ant進行手工打包:ant -buildfile build.xml.下面將相關過程簡單總結如下:

   (1)運用myeclipseweb項目打war,觀察其他結構和組成,方便ant打包build.xml整理

    

 圖1 web項目s2si結構

 

 2 myeclipse打出war包總體結構


 

3.myeclipse打出warWEB-INFO目錄結構

 

4.myeclipse打出warWEB-INFO\classes目錄結構

   (2)build.xml內容整理:

    

 

   (3)本地安裝Ant並設置ANT_HOMEpath

     

 

   (4)運用本地ant打包:

    

---->>打出war包查看:

    

--->>

    

 

   (5)問題及解決歸納總結:

     A1.build.xml注意設置basedir:

     <project name="s2si"  default="dist" basedir=".">

     --->>這裏basedir="."意思是基礎目錄是與build.xml同級目錄,比如說srcs2si,後續新建目錄都是在此基礎上進行,爲了方便打包,可以根據自己需要放置 build.xml,比如我就放在了工程s2si根目錄下.

 

     A2.build.xml注意設置<war>命令中的basedir:

      <war destfile="${build.dir}/${ant.project.name}.war"  basedir="${build.dir}" webxml="${build.web.dir}/web.xml"/>

打包是將編譯好的class文件和相關配置文件集體打包,所以應該選擇   "${build.dir}",開始自己犯錯basedir="${basedir}",直接導致打出的war包下 面很亂,即使打包過程沒出錯,但部署到tomcat上就會報一大堆問題.

 

     A3.打包時需要注意編碼和jdk版本:

    <javac   destdir="${build.web.class.dir}" source="1.6" target="1.6" debug="on" 
    deprecation="false" optimize="false" failοnerrοr="true" srcdir="${src.dir}" >
   <compilerarg line="-encoding UTF-8"/>
   <classpath refid="project.classpath" ></classpath>
    </javac>


--->>字符編碼要和web項目編碼一致,jdk版本要和本地安裝版本一致.如果不致,myeclipse中運行build.xml打包編譯不過,本地手工ant打包會報如下錯:

 eclipse 出現警告: [options] 未與 -source 1.6 一起設置引導類路徑.

 

A4.build.xml拷貝頁面文件和配置文件時注意excludes使用:

<copy todir="${build.web.class.dir}">

       <!-- 複製源代碼目錄中所有的非java文件 -->

        <fileset dir="${src.dir}"  excludes="**/*.java">

        </fileset>

    </copy>

  

    <copy todir="${build.dir}">

        <!-- WebRoot目錄中所有的非java文件 -->

        <fileset dir="${webRoot.dir}" excludes="**/*.class" >

    </fileset>
 </copy>


 

--->>說明:

 ${src.dir}=s2si/src

 ${webRoot.dir}=s2si/WebRoot

這裏需要注意的是要排除指定目錄中某些規則的文件必須用:excludes="**/*.java"或excludes="**/*.class",**/*.*這是ant裏的規則,不是指兩級目錄後的規則篩選.

--->> classpath備忘:

<classpath refid="project.classpath" ></classpath>

這裏用classpath標籤,指定路徑時用classpathref還是用path還是用refid有不同的情況,這裏用的是refid,注意根據自己情況而定.
---->> ant打包核心build.xml內容如下:
 <?xml version="1.0" encoding="UTF-8"?>
<project name="s2si"  default="dist" basedir=".">
<property name="build.dir" value="build" description="輸出目錄"/>
<property name="build.web.dir" value="${build.dir}/WEB-INF" description="web配置輸出目錄"/>
<property name="build.web.class.dir" value="${build.web.dir}/classes" description="web類輸出目錄"/>
<property name="build.web.lib.dir" value="${build.web.dir}/lib" description="web引用jar輸出目錄"/>
<property name="src.dir" value="src" description="源代碼目錄"/>
<property name="webRoot.dir" value="${basedir}/WebRoot" />  
<property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" /> 
<property name="encoding" value="utf-8" description="文件編碼"/>

<path id="project.classpath">
<fileset dir="${lib.dir}">  
           <include name="*.jar" />  
</fileset>  
<pathelement path="${basedir}/WebRoot/WEB-INF/lib"/>
</path>

<target name="init">
<delete dir="${build.dir}"/>
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.web.dir}"/>
<mkdir dir="${build.web.lib.dir}"/>
<mkdir dir="${build.web.class.dir}"/> 
</target>

<target name="compile" depends="init">

<javac   destdir="${build.web.class.dir}" source="1.6" target="1.6" debug="on" 
deprecation="false" optimize="false" failοnerrοr="true" srcdir="${src.dir}" >
   <compilerarg line="-encoding UTF-8"/>
   <classpath refid="project.classpath" ></classpath>
</javac>

<copy todir="${build.web.class.dir}">
<!-- 複製源代碼目錄中所有的非java文件 -->
<fileset dir="${src.dir}"  excludes="**/*.java">
</fileset>
</copy>
  
<copy todir="${build.dir}">
<!-- WebRoot目錄中所有的非java文件 -->
<fileset dir="${webRoot.dir}" excludes="**/*.class" >
</fileset>
</copy>

</target>

<target name="main" depends="init,compile" />
<target name="dist" depends="main" description="將工程打成war包">
<war destfile="${build.dir}/${ant.project.name}.war" basedir="${build.dir}" webxml="${build.web.dir}/web.xml"/>
</target>
</project>

--->>關於ant基礎知識和使用指南,請參見:
http://blog.itpub.net/29119536/viewspace-1203386/
--->>web項目打包指南請參見:
http://blog.itpub.net/29119536/viewspace-1204798/

發佈了15 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章