亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

生成Java可執行文件

系統 1764 0

1. JAR 文件包
JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式。JAR 文件非常類似 ZIP 文件——準確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,如果我們具有如下目錄結構的一些文件:
.\com\fieldstar\isdet\chap9 (文件夾)
AppletSecurityDemo.class (是一個Applet)
Ball.class (是一個Application)
如果我們使用 JDK 的 jar 命令把它打成 JAR 文件包 fieldstar.jar,

jar cvf fieldstar.jar com

當前文件夾中com文件夾下的所有文件都被加進fieldstar.jar文件包中.
但是這個jar包并不是雙擊直接運行的包。
這個 JAR 文件的內部目錄結構為:
fieldstar.jar
|-- META-INF
| `-- MANIFEST.MF
|`-- \com\fieldstar\isdet\chap9
`--AppletSecurityDemo.class
`--Ball.class
java -cp fieldstar.jar com.fieldstar.isdet.chap9.Ball

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 fieldstar.jar manifest.mf com
這里 fieldstar.jar 和 manifest.mf 兩個文件,分別是對應的參數 f 和 m,其重頭戲在 manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因為 MANIFEST 是 JAR 文件包的特征,可執行的 JAR 文件包和不可執行的 JAR 文件包都包含 MANIFEST。關鍵在于可執行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在 MANIFEST 中書寫格式如下:
Main-Class: 可執行主類全名(包含包名)

例如,假設上例中的 Ball.class 是屬于 com.fieldstar.isdet.chap9的,而且是可執行的類 (定義了 public static void main(String[]) 方法),那么:
應該先用文本編輯器建立一個manifest.mf文件;
這個 manifest.mf 可以編輯如下:
Main-Class: test.Test <回車>;
這里是:
Main-Class: com.fieldstar.isdet.chap9.Ball
這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該行以一個回車符結束即可。
之后在當前目錄中創建了 fieldstar.jar,這個 fieldstar.jar 就是執行的 JAR 文件包。運行時只需要使用 java -jar test.jar 命令即可。
或雙擊該jar文件運行.

3. jar 命令詳解
jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什么也不需要做,因為 SUN 已經幫我們做好了。我們甚至不需要將 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,解開后的目錄結構如下:
==
|-- META-INF
| `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
運行結果與 7) 相同,對于解壓過程有詳細信息顯示,如:
創建:META-INF/
展開:META-INF/MANIFEST.MF
創建:test/
展開:test/Test.class
9) jar uf test.jar manifest.mf
在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來查看 test.jar 可以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,如果使用 -m 參數并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來使用的,它的內容會被添加到 MANIFEST 中;但是,如果作為一般文件添加到 JAR 文件包中,它跟一般文件無異。
10) jar uvf test.jar manifest.mf
與 9) 結果相同,同時有詳細信息顯示,如:
增加:manifest.mf(讀入= 17) (寫出= 19)(壓縮了 -11%)
4. 關于 JAR 文件包的一些技巧
1) 使用 unzip 來解壓 JAR 文件
在介紹 JAR 文件的時候就已經說過了,JAR 文件實際上就是 ZIP 文件,所以可以使用常見的一些解壓 ZIP 文件的工具來解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來解壓是因為它們解壓比較直觀,方便。而使用 unzip,則是因為它解壓時可以使用 -d 參數指定目標目錄。
在解壓一個 JAR 文件的時候是不能使用 jar 的 -C 參數來指定解壓的目標的,因為 -C 參數只在創建或者更新包的時候可用。那么需要將文件解壓到某個指定目錄下的時候就需要先將這具 JAR 文件拷貝到目標目錄下,再進行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個 -d 參數即可。如:
unzip test.jar -d dest/
2) 使用 WinZip 或者 WinRAR 等工具創建 JAR 文件
上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創建所需要 ZIP 壓縮包,再往這個 ZIP 壓縮包中添加一個包含 MANIFEST 文件的 META-INF 目錄即可。對于使用 jar 命令的 -m 參數指定清單文件的情況,只需要將這個 MANIFEST 按需要修改即可。
3) 使用 jar 命令創建 ZIP 文件
有些 Linux 下提供了 unzip 命令,但沒有 zip 命令,所以需要可以對 ZIP 文件進行解壓,即不能創建 ZIP 文件。如要創建一個 ZIP 文件,使用帶 -M 參數的 jar 命令即可,因為 -M 參數表示制作 JAR 包的時候不添加 MANIFEST 清單,那么只需要在指定目標 JAR 文件的地方將 .jar 擴展名改為 .zip 擴展名,創建的就是一個不折不扣的 ZIP 文件了,如將上一節的第 3) 個例子略作改動:

--------------------------------------------------------------------

以上的長篇大論估計各位看官,看得都頭暈腦脹了吧!

呵呵 來個精練,短小精干的! 嘎嘎?

將java程序變成可直接雙擊執行的應用程序!

1.先建立一個空文件夾

2.把所有的源文件拷貝到空文件夾下

3.編譯此文件夾下的源文件

4.刪除源文件(只是不想讓別人看到源代碼)

5.jar cvf test.jar *? 打包(test.jar自己命名)

6.jar xvf test.jar??? 解壓

7.刪除test.jar

8.改META-INF中的MANIFEST.MF文件,加上Main-Class:(空格) 包命.類名<回車>??? 保存該文件

9.jar cvfm test.jar *???(注意和第一次打包時候參數的差異,多了一個m哦 )

這九步,希望大家能夠試試!

按照以上9步,就可以打成一個jar包!

?

秘籍:第5步 操作后,產生了jar包,生成清單文件。

修改 META-INF中的MANIFEST.MF文件,加上Main-Class:(空格) 包命.類名<回車>??? 保存該文件

用 WinRAR重新覆蓋該文件,100% 比上面的精干方法更簡潔實用。

生成Java可執行文件


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 涩涩在线 | 日本不卡高清免费 | 国产青色 | 激情五月社区 | 久久精品国产夜色 | 手机看福利 | 99热爱久久99热爱九九热爱 | 久久精品视频8 | 羞羞免费观看视频 | 欧美亚洲精品小说一区二三区 | 久久久久久午夜精品 | 日本一级高清片免费 | 国产日产久久高清欧美一区 | 久久免费播放视频 | 国产毛片一区二区 | 久久精品中文字幕极品 | 国产精品久久久久久久久久98 | 国产伦人伦偷精品视频 | 久久国产乱子伦精品免 | 日韩欧国产精品一区综合无码 | 亚洲欧美视频二区 | 久久99久久99 | 国内精品自在欧美一区 | 亚洲精品不卡久久久久久 | 国产小视频在线观看免费 | 米奇影院7777 | 最新国产精品视频 | 四虎新地址4hu 你懂的 | 国产成人久久综合二区 | 99久久爱re热6在播放 | 91尤物在线视频 | 黄wwwwww| 日韩免费在线 | 色偷偷要色偷偷网站视频在线 | 国产小视频在线观看免费 | 亚洲另类图区 | 国产人成精品免费视频 | 国产成人+亚洲欧洲 | 亚洲九九色 | 国产精品久久福利新婚之夜 | 久久国产精品夜色 |