亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

制作可以執行的 JAR 文件包及 jar 命令詳解

2019-11-18 13:24:14
字體:
來源:轉載
供稿:網友

  作者: 邊城狂人
  
  經常在網上看到有人詢問:如何把 java 程序編譯成 .exe 文件。通常回答只有兩種,一種是
  說,制作一個可執行的 JAR 文件包,就可以像.chm 文檔一樣雙擊運行了;而另一種回答,則是
  使用 JET 來進行編譯。但是 JET 是要用錢買的,而且,據說 JET 也不是能把所有的 Java 程序
  都編譯成執行文件,性能也要打些折扣。所以,使用制作可執行 JAR 文件包的方法就是最佳選擇
  了,何況它還能保持 Java 的跨平臺特性。先來看看什么是 JAR 文件包:
  
  1. JAR 文件包
  
    JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java
  的一種文檔格式。JAR 文件非常類似 Zip 文件——準確的說,它就是 ZIP 文件,所以叫它文件
  包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-
  INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,假如我們具
  有如下目錄結構的一些文件:
  
    ==
    `-- test
      `-- Test.class
  
    把它壓縮成 ZIP 文件 test.zip,則這個 ZIP 文件的內部目錄結構為:
  
    test.zp
    `-- test
      `-- Test.class
  
    假如我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目
  錄結構為:
  
    test.jar
    -- META-INF
      `-- MANIFEST.MF
    `-- test
      `--Test.class
  
  
  2. 創建可執行的 JAR 文件包
  
    制作一個可執行的 JAR 文件包來發布你的程序是 JAR 文件包最典型的用法。
  
    Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據它們所屬的包不同而
  分級分目錄存放;運行前需要把所有用到的包的根目錄指定給 CLASSPATH 環境變量或者 java 命
  令的 -cp 參數;運行時還要到控制臺下去使用 java 命令來運行,假如需要直接雙擊運行必須
  寫 Windows 的批處理文件 (.bat) 或者 linux 的 Shell 程序。因此,許多人說,Java 是一種
  方便開發者苦了用戶的程序設計語言。
  
    其實不然,假如開發者能夠制作一個可執行的 JAR 文件包交給用戶,那么用戶使用起來就需
  要方便了。在 Windows 下安裝 JRE (Java Runtime Environment) 的時候,安裝文件會將 .jar
   文件映射給 javaw.exe 打開。那么,對于一個可執行的 JAR 文件包,用戶只需要雙擊它就可以
  運行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認是由 hh.exe 打開的)。那么,現在的
  要害,就是如何來創建這個可執行的 JAR 文件包。
  
    創建可執行的 JAR 文件包,需要使用帶 cvfm 參數的 jar 命令,同樣以上述 test 目錄為
  例,命令如下:
  
    jar cvfm test.jar manifest.mf test
  
    這里 test.jar 和 manifest.mf 兩個文件,分別是對應的參數 f 和 m,其重頭戲在
  manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因
  為 MANIFEST 是 JAR 文件包的特征,可執行的 JAR 文件包和不可執行的 JAR 文件包都包含
  MANIFEST。要害在于可執行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在
  MANIFEST 中書寫格式如下:
  
    Main-Class: 可執行主類全名(包含包名)
  
    例如,假設上例中的 Test.class 是屬于 test 包的,而且是可執行的類 (定義了 public
   static void main(String[]) 方法),那么這個 manifest.mf 可以編輯如下:
  
    Main-Class: test.Test <回車>
  
    這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class:
  test.Test 一行,且該行以一個回車符結束即可。創建了 manifest.mf 文件之后,我們的目錄結
  構變為:
  
    ==
    -- test
      `-- Test.class
    `-- manifest.mf
  
    這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創建 JAR 文件包。也就是在目
  錄樹中使用“==”表示的那個目錄中,使用如下命令:
  
    jar cvfm test.jar manifest.mf test
  
    之后在“==”目錄中創建了 test.jar,這個 test.jar 就是執行的 JAR 文件包。運行時只
  需要使用 java -jar test.jar 命令即可。
  
    需要注重的是,創建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構對應的目錄結
  構,就像上例一樣。而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名,如上例的
  test.Test;而且在沒有打成 JAR 文件包之前可以使用 java <類名> 來運行這個類,即在上例
  中 java test.Test 是可以正確運行的 (當然要在 CLASSPATH 正確的情況下)。
  
  
  3. jar 命令詳解
  
    jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,
  Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不
  過我們除了安裝 JDK 什么也不需要做,因為 SUM 已經幫我們做好了。我們甚至不需要將
  tools.jar 放到 CLASSPATH 中。
  
    使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:
  
    jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
  
    其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表
  示:
  
    -c 創建新的 JAR 文件包
    -t 列出 JAR 文件包的內容列表
    -x 展開 JAR 文件包的指定文件或者所有文件
    -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
  
    [vfm0M] 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數
  
    -v 生成具體報告并打印到標準輸出
    -f 指定 JAR 文件名,通常這個參數是必須的
    -m 指定需要包含的 MANIFEST 清單文件
    -0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大,但速度更快
    -M 不產生所有項的清單(MANIFEST〕文件,此參數會忽略 -m 參數
  
    [jar-文件] 即需要生成、查看、更新或者解開的 JAR 文件包,它是 -f 參數的附屬參數
    [manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數的附屬參數
  
    [-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使用 cd 命令轉該
  目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用。
    文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目
  錄。假如指定了目錄,那么 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包
  中。
  
    下面舉一些例子來說明 jar 命令的用法:
  
    1) jar cf test.jar test
  
    該命令沒有執行過程的顯示,執行結果是在當前目錄生成了 test.jar 文件。假如當前目錄
  已經存在 test.jar,那么該文件將被覆蓋。
  
    2) jar cvf test.jar test
  
    該命令與上例中的結果相同,但是由于 v 參數的作用,顯示出了打包過程,如下:
  
    標明清單(manifest)
    增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
    增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)
  
    3) jar cvfM test.jar test
  
    該命令與 2) 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包
  過程的信息也略有差別:
  
    增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
    增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)
  
    4) jar cvfm test.jar manifest.mf test
  
    運行結果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不
  同,是包含了 manifest.mf 的內容
  
    5) jar tf test.jar
  
    在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對于 2) 和 3) 生成的
   test.jar 分別應該此命令,結果如下;
  
    對于 2)
  
    META-INF/
    META-INF/MANIFEST.MF
    test/
    test/Test.class
  
    對于 3)
  
    test/
    test/Test.class
  
    6) jar tvf test.jar
  
    除顯示 5) 中顯示的內容外,還包括包內文件的具體信息,如:
  
       0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
      86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
       0 Wed Jun 19 15:33:04 GMT 2002 test/
       7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class
  
    7) jar xf test.jar
  
    解開 test.jar 到當前目錄,不顯示任何信息,對于 2) 生成的 test.jar,解開后的目錄結
  構如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国模精品视频一区二区| 91av视频在线免费观看| 精品福利樱桃av导航| 亚洲成人aaa| 在线观看免费高清视频97| 欧美猛交ⅹxxx乱大交视频| 国产精品永久免费观看| 一区二区成人精品| 亚洲高清久久久久久| 国产精品亚洲欧美导航| 日韩在线高清视频| 欧美精品在线免费观看| 久久精品视频在线播放| 国产一区二区丝袜高跟鞋图片| 国产一区二区三区视频免费| 91在线视频免费| 亚洲国产日韩精品在线| 欧美洲成人男女午夜视频| 中文字幕av一区二区| 亚洲一区二区中文字幕| 亚洲男人天堂2024| 九色精品美女在线| 亚洲国产精品嫩草影院久久| 韩曰欧美视频免费观看| 亚洲女人天堂成人av在线| 97不卡在线视频| 青草青草久热精品视频在线观看| 久久午夜a级毛片| 精品国产91久久久| 亚洲欧洲国产精品| 国产日韩欧美中文| 久久久999国产| 亚洲国产精品yw在线观看| 亚洲精品国产精品久久清纯直播| 精品视频在线导航| 亚洲精品国产欧美| 中文字幕日韩欧美在线| 欧美视频免费在线观看| 91精品国产综合久久久久久久久| 国产精品入口日韩视频大尺度| 亚洲精品美女网站| 狠狠久久亚洲欧美专区| 成人欧美一区二区三区黑人孕妇| 国产亚洲精品久久久久久牛牛| 久久成人精品一区二区三区| 日韩欧美中文字幕在线观看| 黄色精品一区二区| 91av在线免费观看视频| 国产亚洲福利一区| 国产日韩在线免费| 欧美精品videosex性欧美| 久久久久久国产精品久久| 疯狂做受xxxx高潮欧美日本| 亚洲第一精品夜夜躁人人爽| 欧美午夜激情小视频| 国产免费亚洲高清| 亚洲国产成人久久综合| 国产亚洲成精品久久| 亚洲国产精品va在看黑人| 97av在线影院| 国产欧亚日韩视频| 成人观看高清在线观看免费| 国产激情久久久| 国产精品18久久久久久首页狼| 国产成人午夜视频网址| 亚洲午夜未满十八勿入免费观看全集| 久久69精品久久久久久国产越南| 日韩网站免费观看| 国产精品一区二区三区久久久| 国产区精品视频| 国产在线观看精品| 欧美日韩美女在线观看| 亚洲欧美日韩天堂一区二区| 性色av一区二区三区| 亚洲第一区第一页| 欧美大成色www永久网站婷| 美日韩精品免费视频| 国产精品综合久久久| 91高清视频在线免费观看| 欧美精品福利在线| 久久精品亚洲精品| 亚洲欧美在线免费| 亚洲色图日韩av| 一区二区三区视频观看| 一本久久综合亚洲鲁鲁| 色先锋久久影院av| 国产精品美腿一区在线看| 色偷偷av一区二区三区乱| 在线观看欧美日韩国产| 亚洲偷熟乱区亚洲香蕉av| 欧美刺激性大交免费视频| 亚洲精品国产精品国产自| 26uuu久久噜噜噜噜| 亚洲成人黄色网址| 亚洲一区二区三区777| 日本高清久久天堂| 亚洲free性xxxx护士hd| 欧美黑人视频一区| 26uuu另类亚洲欧美日本一| 日韩在线免费高清视频| 97国产精品免费视频| 欧美日韩在线观看视频| 欧洲日本亚洲国产区| 国产亚洲欧美日韩一区二区| 91久久久久久久久久久| 国产精品视频最多的网站| 欧美有码在线观看视频| 日韩精品在线观看网站| 精品久久在线播放| 精品亚洲一区二区三区在线观看| 91精品国产综合久久香蕉的用户体验| 81精品国产乱码久久久久久| 国产午夜精品一区理论片飘花| 操人视频在线观看欧美| 亚洲aⅴ日韩av电影在线观看| 欧美激情视频一区二区三区不卡| 久久久国产精品x99av| 成人国产精品一区| 国产一区二区三区在线看| 日韩美女视频在线观看| 一本色道久久综合亚洲精品小说| 亚洲另类xxxx| 国产精品久久久久久久久久尿| 国产精品久久久久久久天堂| 国产精品国产三级国产专播精品人| …久久精品99久久香蕉国产| 最近2019年日本中文免费字幕| 77777少妇光屁股久久一区| 97色在线播放视频| 国产裸体写真av一区二区| 亚洲a级在线观看| 欧美视频13p| 日韩av大片免费看| 欧美二区在线播放| 欧美成人sm免费视频| 国产91在线播放| 欧美大尺度电影在线观看| 欧美视频在线免费看| 国产精品久久91| 国产区亚洲区欧美区| 欧美黄色三级网站| 国产精品极品美女在线观看免费| 亚洲欧洲免费视频| 亚洲人成绝费网站色www| 午夜精品一区二区三区视频免费看| 国产91精品久| 久久精品国产一区二区电影| 欧美黄网免费在线观看| 欧美成人亚洲成人| 欧美主播福利视频| 亚洲影院色无极综合| 亚洲欧美日韩第一区| 中文字幕日韩视频| 成人综合网网址| 两个人的视频www国产精品| 亚洲欧美制服另类日韩| 91tv亚洲精品香蕉国产一区7ujn| 欧美日韩国产影院| 日韩福利伦理影院免费| 久久久999精品免费| 高清欧美性猛交xxxx黑人猛交| 精品国产91久久久| 国产美女高潮久久白浆| 国产精品私拍pans大尺度在线|