無論是批評的,贊揚的,指著的都請EMAIL給我,你的建議將是我前進的動力! 聯系我
Eclipse 內置了 Ant 。 Ant 是一種類似于批處理程序的軟件包,它主要繁瑣的工作是編寫和調試自動處理腳本(一個 XML 文件),但只要有了這個腳本,我們就可以一鍵完成所有的設定工作。
本節還是以 myswt 這個應用程序項目的打包為例,用 Ant 來完成“編譯->打成 JAR 包->復制項目引用庫->復制本地化文件 swt-win32-3063.dll ->輸出 API 文檔”這五步。
1 、在 myswt 項目根目錄下,創建最主要的 build.xml 文件
代碼說明:
( 1 ) property 項是定義變量,比如 <property name="swt.dll" value="swt-win32-3063.dll" /> ,就是定義一個變量: swt.dll=swt-win32-3063.dll 。以后用這個變量則是這樣: ${swt.dll} 。
一般盡量將今后可能會變動的目錄、文件等定義成變量,以方便維護。不象 Java 變量有類型的區分, Ant 變量是不區別目錄、文件等的,所以為了見名知意,在取變量名時,目錄都加“ dir ”后綴,這個后綴是可以任取名的。
下面給出本例用到的變量的含義:
l?????????? src.dir - Java 源文件路徑。 value="src" 的 src 是一個相對路徑,它相對的是 build.xml 的所在目錄位置(即項目根目錄)。
l?????????? bin.dir - Java 編譯文件的輸出路徑
l?????????? eclipse_plugins.dir - eclipse 的 plugins 目錄
l?????????? dist.dir - 打包文件的存放目錄
l?????????? doc.dir - API 文檔的存放目錄,這里用到了 dist.dir 變量,直接寫 value="d:/dist/api" 也未嘗不可。
l?????????? swt.dll - SWT 本地化文件。
( 2 ) <path id="master-classpath"> ,定義編譯文件時所引用的庫,相當于 classpath 。 <fileset> 項表示一個文件集,再深入一層的 <include> 項,則表示此文件集下的文件,它們的路徑定位相對于 <fileset> 的 dir 屬性。 <fileset> 還有一個 id 屬性,在后面復制引用庫時會用到。
也許有讀者會問:“你是怎么知道要引用這些文件的?”回答:看項目根目錄下的“ .classpath ”文件,就可以知道本項目要引用那些庫了。實際上筆者是把 .classpath 復制一份后,然后用 Editplus 編輯而得。
( 3 )接下來開始定義一些任務。首任務一般都讓它為空(沒有具體任務內容): <target name="init"/> 。
( 4 ) Ant 中的任務有著相互的依賴( depends )關系,這些依賴關系是通過 depends 屬性來定義的。當要執行一個任務時, Ant 先去執行這個任務的 depends 任務,……, Ant 就這樣一直往回找下去。比如:在本例的第二行 default="api_doc" ,它定義了缺省任務是 api_doc (輸出 api 文檔)->此任務的 depends = pack (打包)-> pack 的 depends = compile (編譯)-> compile 的 depends=init (首任務), init 沒有 depends 。于是, Ant 就從 init 開始依次往回執行任務: init -> compile -> pack -> api_doc 。
如果你不想“輸出 api 文檔”,則將第二行的缺省任務定義成 default="pack" 即可,這時整個任務鏈就拋開了 api_doc 。
( 5 ) <delete dir="${bin.dir}"/> 刪除目錄。 <mkdir dir="${bin.dir}"/> 新建目錄
( 6 )編譯源程序,如下
<javac srcdir="${src.dir}" destdir="${bin.dir}" target="1.4">
??? <classpath refid="master-classpath"/>
</javac>
l?????????? srcdir - 源文件目錄,其子目錄中的源文件也會被 javac.exe 編譯。
l?????????? destdir - 編譯文件輸出目錄。
l?????????? target - 以 JDK1.4 為編譯目標。
l?????????? classpath - 編譯的 classpath 設置, refid 是指引用前面設定的 master-classpath 。
( 7 )將 icons (即 myswt/icons )目錄的文件,復制到 myswt/bin/icons 目錄中,如下:
<copy todir="${bin.dir}/icons">
??? <fileset dir="icons"/>
</copy>
( 8 )將文件打成 JAR 包
<jar basedir="${bin.dir}" destfile="${dist.dir}/myswt.jar" manifest="ant_manifes.txt">
??? <exclude name="**/*Test.*" />
??? <exclude name="**/Test*.*" />
</jar>
l?????????? basedir - 源目錄。
l?????????? destfile - 目標目錄和打成 JAR 包名。
l?????????? manifest - 打包清單文件(后面給出其內容)。
l?????????? exclude - 使用了通配符將某一些文件排除不打包(主要是一些測試文件)。
( 9 )如下,將 project_lib 的文件復制到 d:/dist/lib 目錄中。 project_lib 是前面“定義編譯文件時所引用的庫”中的文件集的 id 。結果參數下圖 21.25
<copy todir="${dist.dir}/lib">
??? <fileset refid="project_lib"/>
( 10 )將本地化文件復制到 d:/dist 目錄中,如下:
<copy todir="${dist.dir}" file="${swt.dll}"/>?
( 11 )輸出 API 文檔(結果參數下圖 21.26 )
<javadoc destdir="${doc.dir}" author="true" version="true" use="true" windowtitle="MySWT API">
??? <packageset dir="${src.dir}" defaultexcludes="yes"/>
??? <doctitle><![CDATA[<h1>MySWT Project</h1>]]></doctitle>
??? <bottom><![CDATA[<i>Document by ChenGang 2005.</i>]]></bottom>
</javadoc>
l?????????? destdir - 目標路徑 d:/dist/api
l?????????? packageset - 源文件目錄
l?????????? doctitle - 標題
l?????????? bottom - 標尾。
2 、創建打包清單
為了避免和原來的 manifes.txt 同名,在項目根目錄建立一個名為 ant_manifes.txt 的文件。這個文件內容中最長的是 Class-Path 項,沒有必要一個個字符的敲入,它可以由項目根目錄下的“ .classpath ”編輯而得。-----------------------------------------------------------------一片很不錯的文章http://dev.csdn.net/article/72718.shtm
posted on 2005-09-26 14:14 瘋流成性 閱讀(335) 評論(0) 編輯 收藏 所屬分類: 轉貼區
Powered by: BlogJava Copyright © 瘋流成性