2014年2月14日 星期五

[筆記] Cruise Control番外篇-Ant build file介紹

  Ant的build file類似makefile,不過使用的是xml語法來撰寫。下面介紹如何撰寫Ant的build file。
完整的Ant build file範例

基本架構


<project name="ProjectName" default="all">
 <property name="src" location="src"/>
 <property name="dist" location="bin"/>
 <!-- This is comment. -->
 <target name="all" depends="compile"/>

 <target name="compile">
  <javac srcdir="${src}" destdir="${dist}" encoding="UTF-8">
   <classpath>
    <pathelement location="lib/javax.mail.jar" />
    <pathelement location="lib/jsoup-1.7.3.jar"/>
   </classpath>
  </javac>
 </target>
</project>

第一行指定此project的名字,還有此build script一開始要執行那一個target(之於makefile的tag)。
第二行和第三行定義變數(之於makefile的變數定義),用${src}可以取得src的值。
第四行的註解就跟html語法一樣,從<!-- 到 -->為止。
第五行和第七行的target,就是標記所有執行的task。第五行的task名稱為all,depends所指定的就是執行這個task之前需要再執行哪些task,在這裡就是會先執行compile這個task。
第七行到第14行<target>就指定compile這個task要做哪些事。<javac>的屬性告訴java的compiler,原始碼所在的目錄-srcdir、所產生的class檔案要放置的目錄-destdir、程式編碼指定UTF-8。
第九行到第12行<classpath>可以指定其他外部library的路徑,由其子元素<pathelement location="">指定library的檔名及路徑。

JUnit test task



<target name="test" depends="compile">
 <!--Compile the test class files-->
 <mkdir dir="${testclass}"/>
 <javac srcdir="${t_src}" destdir="${testclass}">
  <classpath>
   <pathelement location="${dist}"/>
   <pathelement location="lib/junit-4.11.jar"/>
  </classpath>
 </javac>
  <!--Test progress and the test result would be
   stored at the directory ${testresult}.-->
 <mkdir dir="${testresult}"/>
 <junit haltonfailure="no" printsummary="on">
  <classpath>
   <pathelement location="${dist}"/>
   <pathelement location="lib/junit-4.11.jar"/>
   <pathelement location="lib/jsoup-1.7.3.jar"/>
   <pathelement location="${testclass}"/>
  </classpath>
  <formatter type="brief" usefile="false"/>
  <formatter type="xml"/>
  <batchtest todir="${testresult}">
   <fileset dir="${testclass}" includes="*Test.class"/>
  </batchtest>
 </junit>
</target>

JUnit Task for Ant
第四行到第九行與compile類似,主要是編譯JUnit會用到的class,必須包含原始碼所編譯出來的.class檔。
第三行的<mkdir>可以建立指定名稱的目錄。
第13行到第24行為JUnit的設定。第13行要求JUnit在進行測試時,就算途中出現錯誤也無法停止,並將結果輸出。
第15到18行必須將所有需要用到的class檔還有library都包含進來。
第20行為指定輸出型態,brief指定只有在失敗時才輸出,usefile則是要不要將這些結果輸出成檔案。
第21行指定將測試結果輸出成xml檔案。
第22行的<batchset>指定需要使用的test class,其中todir屬性指定將結果輸出到該目錄。
第23行的<fileset>就幫助指定這些test class在哪裡,以及有哪些class檔。

Jar



<target name="jar" depends="compile">
 <mkdir dir="${build}"/>
 <jar jarfile="${build}/ProjectName.jar" basedir="${dist}"/>
</target>

這是建立jar file的task。可以看到先建立目錄,再指定輸出的jar檔名以及來源目錄。

其他task



<target name="clean">
 <delete dir="${dist}"/>
 <delete dir="${testclass}"/>
 <delete dir="${build}"/>
</target>

這是一個清除可以用來清除前次build的task。<delete>指定的目錄無論是否為空都會被清除掉。

如果要讓每一次的build都可以完整跑完整個流程,則可以將all task寫成
<target name="all" depends="clean, compile, test, jar"/>

要注意task的執行順序會有先後

參考資料




Cruise Control(一)-介紹Continuous Integration
Cruise Control(二)-架設Cruise Control及概觀
Cruise Control(三)-config.xml設定

沒有留言:

張貼留言