隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創(chuàng)作品(標有[原]字樣)轉(zhuǎn)載時請注明出處,謝謝。

          常用鏈接

          常用設(shè)置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156395
          • 排名 - 390

          最新評論

          [標題]:[原]手動打包JAR為可執(zhí)行文件
          [時間]:2012-02-13
          [摘要]:打包JAR的步驟、JAR包內(nèi)部的資源訪問以及MANIFEST.MF文件格式注意事項。
          [關(guān)鍵字]: Java、package、打包、Jar、manifest、可執(zhí)行文件
          [文章編號]:暫無
          [環(huán)境]: JDK 7.0
          [作者]: wintys  (wintys@gmail.com)

          [正文]:
          0、背景
              盡管IDE自動打包JAR的功能已經(jīng)很強大,但是手動打包JAR的步驟和注意事項也得心知肚明。對于簡單的示例程序,使用手動打包也很方便。

          1、打包JAR
              1.1 建立清單文件
              以下內(nèi)容為文件內(nèi)容   
              清單文件MANIFEST.MF(在D:\test\class目錄下):
              ==================
              Manifest-Version: 1.0   
              Main-Class: a(主類的路徑,此選項可選,如果希望在windows下雙擊就執(zhí)行,必須寫)   
              Created-By: 1.7.0_02 (Oracle Corporation)(隨便寫,這個是創(chuàng)建人名字)   
              ==================   

              1.2 打包   
              在D:\test\class\目錄下執(zhí)行   
              jar cvfm classes.jar MANIFEST.MF *.*   

              以上命令將class下所有文件打包到classes.jar,生成在class目錄下。   

              1.3 執(zhí)行   
              輸入java -jar classes.jar執(zhí)行  或   雙擊classes.jar即可。

              1.4 另一種方案   
              如果希望使用非JAR工具建立JAR文件, 建議使用WinRAR。首先還是需要建立一個清單文件(名字必須為MANIFEST.MF), 向此文件中寫入同使用JAR 工具時一樣的內(nèi)容, 接著需要建立一個META-INF子目錄, 然后將 MANIFEST.MF放入此目錄, 接著就可以保持目錄結(jié)構(gòu)將所有這些內(nèi)容使用 WinRAR 壓縮為 ZIP 格式的文件,文件名取為 xxx.jar 即可。

          2、需要注意的相關(guān)問題
          2.1 JAR中的資源訪問
              程序的資源文件(如*.gif, *.jpg, *.jpeg, *.properties 等等)不能使用物理路徑, 只能使用相對于當前類文件的相對資源路徑, 只有這樣才能保證打包以后程序才能找到這些資源文件. 那么, 這些文件在打開的時候都要使用下列語句:
              URL url = getClass().getResource(String name);
              或者
              InputStream in = getClass().getResourceAsStream(String name);

              例如:
              URL url = getClass().getResource("loading.gif");
              ImageIcon icon = new ImageIcon(url);
              其它的資源文件的使用也與此相似. 不過屬性文件(*.properties)的使用, Java 自動會加載 JAR 文件中的屬性文件, 例如:
          ResourceBundle.getBundle("com.abc.test");
          那么, 這個文件只要放在 JAR 文件目錄結(jié)構(gòu)下的 com/abc/test.properties, Java 就能自動找到這個文件.

          2.2 清單文件的格式
          MANIFEST.MF內(nèi)容示例(添加JAR庫文件,在Class-Path指明路徑):
              Manifest-Version: 1.0   
              Class-Path: lib/commons-codec-1.4.jar lib/commons-logging-1.1.1.jar li
               b/httpclient-4.1.3.jar lib/httpclient-cache-4.1.3.jar lib/httpcore-4.
               1.4.jar lib/httpmime-4.1.3.jar    
              Created-By: 1.7.0_02 (Oracle Corporation)
              Main-Class: MyLogin

              a.清單文件文件條目的冒號后有一個空格。
              b.清單文件總是以Manifest-Version屬性開頭
              c.每行最長72個字符,如果超過,采用續(xù)行。(手動寫MANIFEST.MF時不受此限,用JAR.exe生成JAR包時會自動斷行。)
              d.確認每行都以回車結(jié)束,否則改行將會被忽略。
              e.如果Class-Path 中的存在路徑,使用"/"分隔目錄,與平臺無關(guān)。
              f.Class-Path中的jar包之間用空格分隔,而非分號。
              g.如果庫不打包入JAR,寫成:Class-Path: ./lib/jacob.jar ./lib/jdom.jar ./lib/log4j.jar

          [參考資料]:
              [1]*《命令行用JAR打包CALSS文件,很簡單》: http://www.diybl.com/course/3_program/java/javajs/20090407/164482.html
              [2] 《打包程序為 JAR 可執(zhí)行文件》 : http://www.moon-soft.com/doc/25438.htm
              [3] 《打jar把第三方的jar也打進去》 : http://www.aygfsteel.com/soddabao/archive/2007/01/08/92455.html
              [4] 《Jar命令 Manifest.mf的用法》 : http://ganqing.iteye.com/blog/1138341
              [5] 《關(guān)于 jar包中MANIFEST.MF 寫法 》 : http://blog.csdn.net/happyhell/article/details/6639792
              [6]*《JAR File Specification》(Oracle) : http://docs.oracle.com/javase/1.3/docs/guide/jar/jar.html#The%20META-INF%20directory
          原創(chuàng)作品,轉(zhuǎn)載請務(wù)必保持原文完整性并注明出處。
          作者:wintys (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys
          posted on 2012-02-13 20:35 天堂露珠 閱讀(1294) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 日土县| 木兰县| 昔阳县| 水富县| 谷城县| 安徽省| 乌苏市| 白朗县| 镇沅| 永新县| 阿瓦提县| 黑龙江省| 万年县| 丹棱县| 永仁县| 祁东县| 孟津县| 仪陇县| 卢湾区| 黎川县| 元氏县| 林芝县| 淮安市| 涡阳县| 阿克陶县| 惠州市| 三门峡市| 阳曲县| 廉江市| 文登市| 葵青区| 桐城市| 色达县| 关岭| 阿拉善右旗| 巴马| 察哈| 白沙| 肥城市| 庆安县| 庐江县|