<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    編程之道

    無論是批評的,贊揚的,指著的都請EMAIL給我,你的建議將是我前進的動力! 聯系我

    [轉]用Ant來打包

    21.3? Ant 來打包

    Eclipse 內置了 Ant Ant 是一種類似于批處理程序的軟件包,它主要繁瑣的工作是編寫和調試自動處理腳本(一個 XML 文件),但只要有了這個腳本,我們就可以一鍵完成所有的設定工作。

    本節還是以 myswt 這個應用程序項目的打包為例,用 Ant 來完成“編譯->打成 JAR 包->復制項目引用庫->復制本地化文件 swt-win32-3063.dll ->輸出 API 文檔”這五步。

    1 、在 myswt 項目根目錄下,創建最主要的 build.xml 文件

    <? xml?version="1.0" ?>

    < project? name ="myswt?project" ?default ="api_doc" >

    ????
    <!-- ?定義目錄變量? -->

    ????
    < property? name ="src.dir" ?value ="src" ? />

    ????
    < property? name ="bin.dir" ?value ="bin" ? />

    ????
    < property? name ="eclipse_plugins.dir" ?value ="c:/eclipse/plugins" ? />

    ????
    < property? name ="dist.dir" ?value ="d:/dist" ? />

    ????
    < property? name ="doc.dir" ?value ="${dist.dir}/api" ? />

    ????
    < property? name ="swt.dll" ?value ="swt-win32-3063.dll" ? />

    ????
    <!-- ?定義編譯文件時所引用的庫? -->

    ????
    < path? id ="master-classpath" >

    ????????
    < fileset? dir ="${eclipse_plugins.dir}" ?id ="project_lib" >

    ????????????
    < include? name ="org.eclipse.ui.workbench_3.0.1/workbench.jar" />

    ????????????
    < include? name ="org.eclipse.swt.win32_3.0.1/ws/win32/swt.jar" />

    ????????????
    < include? name ="org.eclipse.jface_3.0.0/jface.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/osgi.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/core.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/resolver.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/defaultAdaptor.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/eclipseAdaptor.jar" />

    ????????????
    < include? name ="org.eclipse.osgi_3.0.1/console.jar" />

    ????????????
    < include? name ="org.eclipse.core.runtime_3.0.1/runtime.jar" />

    ????????????
    < include? name ="org.eclipse.jface.text_3.0.1/jfacetext.jar" />

    ????????????
    < include? name ="org.eclipse.ui.workbench.compatibility_3.0.0/compatibility.jar" />

    ????????
    </ fileset >

    ????
    </ path >



    ????
    <!-- ?首任務(空) -->

    ????
    < target? name ="init" />

    ????
    <!-- ?編譯? -->

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

    ????????
    < delete? dir ="${bin.dir}" />

    ????????
    < mkdir? dir ="${bin.dir}" />

    ????????
    <!-- 編譯源程序 -->

    ????????
    < javac? srcdir ="${src.dir}" ?destdir ="${bin.dir}" ?target ="1.4" >

    ????????????
    < classpath? refid ="master-classpath" />

    ????????
    </ javac >

    ????????
    <!-- 復制圖標目錄 -->

    ????????
    < mkdir? dir ="${bin.dir}/icons" />

    ????????
    < copy? todir ="${bin.dir}/icons" >

    ????????????
    < fileset? dir ="icons" />

    ????????
    </ copy >

    ????
    </ target >

    ????
    <!-- ?打包? -->

    ????
    < target? name ="pack" ?depends ="compile" >

    ????????
    <!-- ?bin目錄壓縮成JAR包? -->

    ????????
    < delete? dir ="${dist.dir}" />

    ????????
    < mkdir? dir ="${dist.dir}" ? />

    ????????
    < jar? basedir ="${bin.dir}" ?destfile ="${dist.dir}/myswt.jar" ?manifest ="ant_manifes.txt" >

    ????????????
    < exclude? name ="**/*Test.*" ? />

    ????????????
    < exclude? name ="**/Test*.*" ? />

    ????????
    </ jar >

    ????????
    <!-- ?復制用到的庫? -->

    ????????
    < mkdir? dir ="${dist.dir}/lib" ? />

    ????????
    < copy? todir ="${dist.dir}/lib" >

    ????????????
    < fileset? refid ="project_lib" />

    ????????
    </ copy >

    ????????
    <!-- ?復制本地化文件? -->

    ????????
    < copy? todir ="${dist.dir}" ?file ="${swt.dll}" />

    ????
    </ target >

    ????
    <!-- ?輸出api文檔? -->

    ????
    < target? name ="api_doc" ?depends ="pack" >

    ????????
    < delete? dir ="${doc.dir}" />

    ????????
    < mkdir? dir ="${doc.dir}" ? />

    ????????
    < 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 >

    ????
    </ target >

    </ project >



    代碼說明:

    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"/>

    </copy>

    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)  編輯  收藏 所屬分類: 轉貼區

    主站蜘蛛池模板: 可以免费观看一级毛片黄a| 在线a级毛片免费视频| 在线观看91精品国产不卡免费| 亚洲xxxxxx| 18禁超污无遮挡无码免费网站国产 | 免费a级毛片网站| 色妞www精品视频免费看| 免费国产美女爽到喷出水来视频| 日本亚洲欧美色视频在线播放| 午夜国产羞羞视频免费网站| 免费中文字幕视频| 亚洲熟妇无码另类久久久| 日韩免费高清播放器| 色拍自拍亚洲综合图区| 国产在线jyzzjyzz免费麻豆| 中国亚洲呦女专区| 一区二区三区亚洲视频| 成人妇女免费播放久久久| 99久久亚洲精品无码毛片| 欧美大尺寸SUV免费| 国产精品亚洲片在线花蝴蝶| 国产AⅤ无码专区亚洲AV| 日韩人妻一区二区三区免费| 亚洲av成人综合网| 亚洲AV无码一区二区三区在线观看 | xvideos永久免费入口| 亚洲国产高清人在线| 青苹果乐园免费高清在线| 色偷偷亚洲男人天堂| 久久亚洲国产欧洲精品一| 亚洲国产精品免费在线观看| 亚洲国产AV无码一区二区三区| 国产亚洲?V无码?V男人的天堂 | 久久精品国产亚洲夜色AV网站| 免费可以看黄的视频s色| 日韩成人精品日本亚洲| 亚洲国产精品无码专区| 女性自慰aⅴ片高清免费| 两性色午夜视频免费网| 亚洲综合一区无码精品| 亚洲国产成人片在线观看无码|