Ant學習小結

Ant學習小結
ximazi 原創  (參與分:1521,專家分:100)   發表:2005-09-06 14:56   版本:1.0   閱讀:477

首先介紹一下Ant.Ant是一種基於Java的build工具。理論上來說,它有些類似於(Unix)C中的make ,但沒有make的缺陷。得益於Java的跨平臺性,Ant也是一個跨平臺的工具。
1。Ant詳細介紹請參考http://ant.apache.org/
2。Ant的下載,http://jakarta.apache.org/builds/jakarta-ant/release
3。Ant的安裝,針對Win32 ,請下載ant的apache-ant-1.6.5-bin.zip。將Ant解壓縮到C:/,解壓縮完畢後,默認的文件夾名爲apache-ant-1.6.5,重新命名爲Ant。
4。Ant的配置,在系統的高級裏面配置環境變量。用戶變量 裏增加 ANT_HOME = C:/Ant; 系統變量的 Path 裏面增加這樣一句 C:/Ant/Bin。這樣配置完成後,註銷用戶重新登錄後,Ant就可以使用了。
5。Ant的使用,首先介紹一下Ant的基本用途,Ant可以用來編譯Java文件、打包Jar,War、生成Javadoc等。
我現在就具體介紹一下自己學習使用Ant的過程。首先使用Ant就是想要使得編譯自己的java程序不再是那麼緩慢,不需要使用Eclipse,節省一下不多的內存。那麼就先拿一個十分簡單的測試項目來試驗一下。要使得Ant運行,就要編寫build.xml。build.xml要放置於你項目的根目錄下。由於執行Ant是這樣一個流程,你cmd進入命令行界面,到你的項目根目錄下,輸入ant,此時ant就會在根目錄下尋找build.xml,找到build.xml後根據配置執行任務。那麼最重要的工作就是Ant的build.xml的編寫。
    build.xml設置了一系列任務,即target。
    例子:<target name="init">
          </target>
target按照習慣一般分爲幾種:
1 usage 打印本腳本的幫助信息(缺省)
2 init 初始化信息,變量等
3 build 編譯
4 javadoc 生成javaAPI 文檔
5 jar 將生成文件打包Jar
6 clean 清除過程文件、目錄
7 all 全部任務執行
從最簡單的只執行一個target開始,就是build,這個是我最想用的任務。
以例子開始說:
<?xml version="1.0"?>
<project default="build" basedir="."> 
   <property name="appname" value="jspsmartupload" />
   <property name="src" value="src" />
   <property name="build" value="WEB-INF/classes" />
   <property name="myclasspath" value="${base}/WEB-INF/lib" />    
   <target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />          
       </javac>
   </target>
</project>
    這個build.xml是一個簡單項目的Ant腳本是我最開始寫的,中間有許多錯誤。在這個build.xml中 <project default="build" basedir="."> 含義是,默認執行任務爲build,根目錄爲當前目錄。<property name="src" value="src" />是定義一些路徑變量給後面使用。
<target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />          
       </javac>
   </target>
這個任務段,就是build任務,首先 mkdir就是創建文件夾,然後進行編譯。
但是在寫完運行Ant的時候出錯了。
    爲什麼會出錯,原因是沒有引入classpath,修改Ant如下:
<?xml version="1.0"?>
<project default="build" basedir="."> 
   <property name="appname" value="jspsmartupload" />
   <property name="src" value="src" />
   <property name="build" value="WEB-INF/classes" />
   <property name="myclasspath" value="${base}/WEB-INF/lib" />    
   <target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />    
            <classpath>
                  <pathelement path="${myclasspath}"/>
                  <fileset dir="./WEB-INF/lib"><include name="**/*.jar"/></fileset>
                  <pathelement location="classes"/>
             </classpath>      
       </javac>
   </target>
</project>
再次運行Ant,成功。
    現在要來更加複雜一些的嘗試了。
    現在,我們在一個ant項目中使用更多的target,爲更復雜的項目執行編譯,打包和生成javadoc文檔的工作。
    還是用例子來說明:
<project default="all" basedir=".">
  <!-- =================================================================== -->
  <!-- Initialization target                                               -->
  <!-- =================================================================== -->
  <target name="init">
    <tstamp/>
    <property file="${basedir}/build.properties" />
    <property name="Name" value="Ant_All_Test"/>
    <property name="name" value="project_name"/>
    <property name="version" value="0.1"/>
    <property name="year" value="2005"/>
    <echo message="----------- ${Name} ${version} [${year}] ------------"/>
    <property name="debug" value="off"/>
    <property name="optimize" value="on"/>
    <property name="deprecation" value="on"/>
    <property name="src" value="./src"/>
    <property name="lib" value="./lib"/>
    <property name="build.src" value="./web/WEB-INF/src"/>
    <property name="build" value="./web/WEB-INF/classes"/>
    <property name="javadocs" value="./doc"/>
    <property name="packages" value="com.xxxxxxxx.*"/>
    <path id="classpath">
        <pathelement path="${jsdk_jar}"/>
        <fileset dir="${lib}">
           <include name="**/*.jar"/>
        </fileset>
    </path>    
    <filter token="year" value="${year}"/>
    <filter token="version" value="${version}"/>
    <filter token="date" value="${TODAY}"/>
    <filter token="log" value="true"/>
    <filter token="verbose" value="true"/>
  </target>
  <!-- =================================================================== -->
  <!-- Help on usage                                                       -->
  <!-- =================================================================== -->
  <target name="usage" depends="init">
    <echo message="${Name} Build file"/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=" available targets are:"/>
    <echo message=""/>
    <echo message="   jar      --> generates the ${name}.jar file"/>
    <echo message="   build    --> compiles the source code"/>
    <echo message="   javadoc  --> generates the API documentation"/>
    <echo message="   clean    --> cleans up the directory"/>
    <echo message=""/>
    <echo message=" Please rename build.properties.default to build.properties"/>
    <echo message=" and edit build.properties to specify JSDK 2.3 classpath."/>
    <echo message=""/>
    <echo message=" See the comments inside the build.xml file for more details."/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=""/>
  </target>
  <!-- =================================================================== -->
  <!-- Prepares the source code                                            -->
  <!-- =================================================================== -->
  <target name="prepare-src" depends="init">
    <!-- create directories -->
    <mkdir dir="${build.src}"/>
    <mkdir dir="${build}"/>
    
    <!-- copy src files -->
    <copy todir="${build.src}">
      <fileset dir="${src}"/>
    </copy>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory                                       -->
  <!-- =================================================================== -->
  <target name="build" depends="prepare-src">
    <javac srcdir="${build.src}"
           destdir="${build}"
           debug="${debug}"
           optimize="${optimize}">
      <classpath refid="classpath"/>
    </javac>
  </target>
  <!-- =================================================================== -->
  <!-- Creates the class package                                           -->
  <!-- =================================================================== -->
 <!--  <target name="jar" depends="build">
    <jar jarfile="${lib}/${name}.jar"
         basedir="${build}"
         includes="**"/>
  </target> -->
  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadoc" depends="build">
    <mkdir dir="${javadocs}"/>
    <javadoc packagenames="${packages}"
             sourcepath="${build.src}"
             destdir="${javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             windowtitle="${Name} API"
             doctitle="${Name}">
      <classpath refid="classpath"/>
    </javadoc>
  </target>
  <target name="all" 
          depends="usage,init,prepare-src,build,javadoc" 
          description="make all task." />
  
</project>
<!-- End of file -->
    從腳本開頭我們看到<project default="all" basedir=".">,表明項目默認target是all。那麼我們找到<target name="all" depends="usage,init,prepare-src,build,javadoc" description="make all task." />;這個target depends="usage,init,prepare-src,build,javadoc"這個就是調用了其他各個target任務。其他各個任務依次進行。執行ant後成功執行各個操作,順利完成編譯和javadoc生成。經過自己的嘗試和學習又有了新的收穫,感覺很好。希望大家都能多動手,這樣新知識自然融會貫通。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章