我的第一個ant應用

<?xml version="1.0" encoding="UTF-8" ?>
<project name="ecp-oracle" basedir="." default="copyProjectToTomcat">
<property name="src" value="src"/>
<property name="dest" value="web/WEB-INF/classes"/>
<property name="build" value="../build"/>
<property name="project" value="ecp-oracle"/>

<property name="tomcat.webapp.dir" value="F:/apache-tomcat-6.0.29/webapps"/>
<property name="tomcat.project" value="*.war"/>
<property name="tomcat.dir" value="F:/apache-tomcat-6.0.29"/>

<!--  指定編譯所依賴的jar-->

<path id="project.classpath">
 <fileset dir="web/WEB-INF/lib">
        <include name="*.jar"/>
     </fileset>
  </path>
<target name="init">
<tstamp/><!-- 生成時間戳 -->
<delete dir="${dest}" />
<mkdir dir="${dest}" />
<delete dir="${build}" />
<mkdir dir="${build}" />

<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar"/><!-- 使用svn的支持 這裏就要求svnant.jar在系統classpath中  -->
</target>
<target name="copy" depends="init">
 <copy todir="${dest}">
  <fileset dir="src/conf/"/>
 </copy>

<!--  svn更新代碼 -->
<target name="update" depends="init">
        <svn username="pengch" password="123456">
            <update dir="../${project}"/>
        </svn>
</target>
</target>
<target name="compile" depends="copy">
  <javac srcdir="${src}" destdir="${dest}" encoding="UTF-8">
  <classpath refid="project.classpath"/>
  </javac>
</target>
<target name="copy2" depends="compile">
 <copy todir="${build}">
  <fileset dir="web/"/>
 </copy>
</target>
<target name="build" depends="copy2">
 <jar jarfile="${project}-${DSTAMP}.war" basedir="${build}"/>
</target>
<target name="clean" depends="build">
 <delete dir="${dest}"/>
 <delete dir="${build}"/>
</target>

<!-- 拷貝項目到tomcat的webapps中 -->
    <target name="copyProjectToTomcat" depends="clean">
        <delete dir="${tomcat.webapp.dir}/${tomcat.project}" />
        <copy todir="${tomcat.webapp.dir}/" file="${project}-${DSTAMP}.war"/>
    </target>

<!-- 停止tomcat -->
    <target name="stopTomcat">
        <exec dir="${tomcat.dir}/bin" executable="cmd.exe" os="Windows XP">
            <arg line="/c shutdown.bat" />
        </exec>
    </target>

    <!-- 啓動tomcat -->
    <target name="startTomcat">
        <exec dir="${tomcat.dir}/bin" executable="cmd.exe" os="Windows XP">
            <arg line="/c startup.bat" />
        </exec>
    </target>

</project>

 

通過網上的資料以及自己的測試實踐做出的第一個ant應用,這個應用的作用主要是完成支持svn更新項目、項目的打包及發佈到tomcat服務器部署運行。

關於其每一句的詳情解析在這就不廢話了,因爲之前轉載了一篇適合初學者的ant實例有對每一句的詳情講解,在這就記錄下我一步步下來遇到的一些問題及解決(注:我的項目是java project):

 

1、字符編碼問題:javac編譯時報“GBK不可映射字符”和“非法字符/65279”錯誤

     GBK不可映射字符:<javac srcdir="${src}" destdir="${dest}" encoding="UTF-8">  在此指定字符編碼爲“UTF-8”即可

     非法字符/65279:用editplus打開所報文件 Document--File Encoding--Change File Encoding 此亦可選擇多文件字符編碼更改File Encoding Multiple修改爲“UTF-8”保存即可

 

2、用ant編譯時指定讀取需要的項目lib下的jar包,所以需要配置classpath指定jar包的路徑

     設置classpath的方法有多種
<path id="project.classpath">
    1<pathelement path="${basedir}/lib/aa.jar"/>
    2<pathelement location="aa.jar"/>與1的區別在於location可以去當前路徑,當然可以使用絕對路徑
    3<filelist id="file" dir="${basedir}/lin">
          <file name="a.jar"/>
          <file name="d:lib/b.jar"/>
     </filelist>
    4<fileset dir="d:/lib">
        <include name="**/*.jar"/>
     </fileset> 
   </path>   
下面說classpath的使用
   樣例如下
     <javac scdir="./src" destdir="./classes">
           <classpath refid="project.classpath"/> 
   </javac>


下面是比較四種方式的優缺點
   第一種調用的需要設置絕對路徑適合第三方jar包 
   第二種則適合jar包和build.xml文件在同一目錄下的情況,但是我覺得兩個文件放在一起本身就不合理,估計是用的情況不多。
前兩個都是設置單個jar包 
  第三種是一個文件集合適合引入不同路徑的jar包,但是需要輸入每個jar包的名字,比較繁瑣,適合於jar包屬於不同位置,比較分散但是不多的情況
  第四種是一個文件夾,可以採用匹配模式來引入,這個適合在同一個文件夾下,文件名字比較多的情況下

 

 

3、打war包時追加當前時間命名文件( 生成時間戳):

     這種需要是通過簡單但是非常有用的 tstamp 任務來解決的。這個任務通常在某次生成過程開始時調用,比如在一個 init 目標中。這個任務不需要屬性,許多情況下只需 <tstamp/> 就足夠了。

tstamp 設置的屬性:

           屬性                                         說明                                             例子
        DSTAMP               設置爲當前日期,默認格式爲yyyymmdd              20031217
        TSTAMP                   設置爲當前時間,默認格式爲hhmm                     1603
         TODAY                       設置爲當前日期,帶完整的月份                  2003年12月17日
 

將JAR文件將命名爲package-20031217.jar

<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>
 

還可以配置 tstamp 任務來設置不同的屬性,應用一個當前時間之前或之後的時間偏移,或以不同的方式格式化該字符串。所有這些都是使用一個嵌套的 format 元素來完成的,如下所示:

<tstamp>

   <format property="OFFSET_TIME"

           pattern="HH:mm:ss"

           offset="10" unit="minute"/>

</tstamp>
 

上面的清單將OFFSET_TIME 屬性設置爲距離當前時間 10分鐘之後的小時數、分鐘數和秒數。

用於定義格式字符串的字符與 java.text.SimpleDateFormat 類所定義的那些格式字符相同。

 

4、使用svn的支持:

    

    1>、ant本身需要svnant任務插件支持,才能在ant腳本中獲取svn中的內容,svnant是subclipse的組件之一,它的URL 是:

       http://subclipse.tigris.org/svnant.html

    2>、使用前需要將它依賴的類庫放在ant安裝目錄下面的lib目錄;

    3>、要想使用svnant中的任務訪問svn的話,首先要定義新的task:

     <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar" />   <!-- 這裏就要求svnant.jar在系統classpath中  -->

 

5、最後就是啓動tomcat及停止tomcat.  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章