日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

生成Java可執(zhí)行文件

系統(tǒng) 2113 0

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

jar cvf fieldstar.jar com

當(dāng)前文件夾中com文件夾下的所有文件都被加進(jìn)fieldstar.jar文件包中.
但是這個(gè)jar包并不是雙擊直接運(yùn)行的包。
這個(gè) JAR 文件的內(nèi)部目錄結(jié)構(gòu)為:
fieldstar.jar
|-- META-INF
| `-- MANIFEST.MF
|`-- \com\fieldstar\isdet\chap9
`--AppletSecurityDemo.class
`--Ball.class
java -cp fieldstar.jar com.fieldstar.isdet.chap9.Ball

2. 創(chuàng)建可執(zhí)行的 JAR 文件包
制作一個(gè)可執(zhí)行的 JAR 文件包來(lái)發(fā)布你的程序是 JAR 文件包最典型的用法。
Java 程序是由若干個(gè) .class 文件組成的。這些 .class 文件必須根據(jù)它們所屬的包不同而分級(jí)分目錄存放;運(yùn)行前需要把所有用到的包的根目錄指定給 CLASSPATH 環(huán)境變量或者 java 命令的 -cp 參數(shù);運(yùn)行時(shí)還要到控制臺(tái)下去使用 java 命令來(lái)運(yùn)行,如果需要直接雙擊運(yùn)行必須寫(xiě) Windows 的批處理文件 (.bat) 或者 Linux 的 Shell 程序。因此,許多人說(shuō),Java 是一種方便開(kāi)發(fā)者苦了用戶(hù)的程序設(shè)計(jì)語(yǔ)言。
其實(shí)不然,如果開(kāi)發(fā)者能夠制作一個(gè)可執(zhí)行的 JAR 文件包交給用戶(hù),那么用戶(hù)使用起來(lái)就方便了。在 Windows 下安裝 JRE (Java Runtime Environment) 的時(shí)候,安裝文件會(huì)將 .jar 文件映射給 javaw.exe 打開(kāi)。那么,對(duì)于一個(gè)可執(zhí)行的 JAR 文件包,用戶(hù)只需要雙擊它就可以運(yùn)行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認(rèn)是由 hh.exe 打開(kāi)的)。那么,現(xiàn)在的關(guān)鍵,就是如何來(lái)創(chuàng)建這個(gè)可執(zhí)行的 JAR 文件包。
創(chuàng)建可執(zhí)行的 JAR 文件包,需要使用帶 cvfm 參數(shù)的 jar 命令,同樣以上述 test 目錄為例,命令如下:
jar cvfm fieldstar.jar manifest.mf com
這里 fieldstar.jar 和 manifest.mf 兩個(gè)文件,分別是對(duì)應(yīng)的參數(shù) f 和 m,其重頭戲在 manifest.mf。因?yàn)橐獎(jiǎng)?chuàng)建可執(zhí)行的 JAR 文件包,光靠指定一個(gè) manifest.mf 文件是不夠的,因?yàn)?MANIFEST 是 JAR 文件包的特征,可執(zhí)行的 JAR 文件包和不可執(zhí)行的 JAR 文件包都包含 MANIFEST。關(guān)鍵在于可執(zhí)行 JAR 文件包的 MANIFEST,其內(nèi)容包含了 Main-Class 一項(xiàng)。這在 MANIFEST 中書(shū)寫(xiě)格式如下:
Main-Class: 可執(zhí)行主類(lèi)全名(包含包名)

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

3. jar 命令詳解
jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運(yùn)行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過(guò)我們除了安裝 JDK 什么也不需要做,因?yàn)?SUN 已經(jīng)幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。
使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄](méi) 文件名 ...
其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個(gè),它們分別表示:
-c 創(chuàng)建新的 JAR 文件包
-t 列出 JAR 文件包的內(nèi)容列表
-x 展開(kāi) JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的選項(xiàng)可以任選,也可以不選,它們是 jar 命令的選項(xiàng)參數(shù)
-v 生成詳細(xì)報(bào)告并打印到標(biāo)準(zhǔn)輸出
-f 指定 JAR 文件名,通常這個(gè)參數(shù)是必須的
-m 指定需要包含的 MANIFEST 清單文件
-0 只存儲(chǔ),不壓縮,這樣產(chǎn)生的 JAR 文件包會(huì)比不用該參數(shù)產(chǎn)生的體積大,但速度更快
-M 不產(chǎn)生所有項(xiàng)的清單(MANIFEST〕文件,此參數(shù)會(huì)忽略 -m 參數(shù)
[jar-文件] 即需要生成、查看、更新或者解開(kāi)的 JAR 文件包,它是 -f 參數(shù)的附屬參數(shù)
[manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數(shù)的附屬參數(shù)
[-C 目錄](méi) 表示轉(zhuǎn)到指定目錄下去執(zhí)行這個(gè) jar 命令的操作。它相當(dāng)于先使用 cd 命令轉(zhuǎn)該目錄下再執(zhí)行不帶 -C 參數(shù)的 jar 命令,它只能在創(chuàng)建和更新 JAR 文件包的時(shí)候可用。
文件名 ... 指定一個(gè)文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目錄。如果指定了目錄,那么 jar 命令打包的時(shí)候會(huì)自動(dòng)把該目錄中的所有文件和子目錄打入包中。
下面舉一些例子來(lái)說(shuō)明 jar 命令的用法:
1) jar cf test.jar test
該命令沒(méi)有執(zhí)行過(guò)程的顯示,執(zhí)行結(jié)果是在當(dāng)前目錄生成了 test.jar 文件。如果當(dāng)前目錄已經(jīng)存在 test.jar,那么該文件將被覆蓋。
2) jar cvf test.jar test
該命令與上例中的結(jié)果相同,但是由于 v 參數(shù)的作用,顯示出了打包過(guò)程,如下:
標(biāo)明清單(manifest)
增加:test/(讀入= 0) (寫(xiě)出= 0)(存儲(chǔ)了 0%)
增加:test/Test.class(讀入= 7) (寫(xiě)出= 6)(壓縮了 14%)
3) jar cvfM test.jar test
該命令與 2) 結(jié)果類(lèi)似,但在生成的 test.jar 中沒(méi)有包含 META-INF/MANIFEST 文件,打包過(guò)程的信息也略有差別:
增加:test/(讀入= 0) (寫(xiě)出= 0)(存儲(chǔ)了 0%)
增加:test/Test.class(讀入= 7) (寫(xiě)出= 6)(壓縮了 14%)
4) jar cvfm test.jar manifest.mf test
運(yùn)行結(jié)果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內(nèi)容不同,是包含了 manifest.mf 的內(nèi)容
5) jar tf test.jar
在 test.jar 已經(jīng)存在的情況下,可以查看 test.jar 中的內(nèi)容,如對(duì)于 2) 和 3) 生成的 test.jar 分別應(yīng)該此命令,結(jié)果如下;
對(duì)于 2)
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class
對(duì)于 3)
test/
test/Test.class
6) jar tvf test.jar
除顯示 5) 中顯示的內(nèi)容外,還包括包內(nèi)文件的詳細(xì)信息,如:
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
解開(kāi) test.jar 到當(dāng)前目錄,不顯示任何信息,對(duì)于 2) 生成的 test.jar,解開(kāi)后的目錄結(jié)構(gòu)如下:
==
|-- META-INF
| `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
運(yùn)行結(jié)果與 7) 相同,對(duì)于解壓過(guò)程有詳細(xì)信息顯示,如:
創(chuàng)建:META-INF/
展開(kāi):META-INF/MANIFEST.MF
創(chuàng)建:test/
展開(kāi):test/Test.class
9) jar uf test.jar manifest.mf
在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來(lái)查看 test.jar 可以發(fā)現(xiàn) test.jar 中比原來(lái)多了一個(gè) manifest。這里順便提一下,如果使用 -m 參數(shù)并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來(lái)使用的,它的內(nèi)容會(huì)被添加到 MANIFEST 中;但是,如果作為一般文件添加到 JAR 文件包中,它跟一般文件無(wú)異。
10) jar uvf test.jar manifest.mf
與 9) 結(jié)果相同,同時(shí)有詳細(xì)信息顯示,如:
增加:manifest.mf(讀入= 17) (寫(xiě)出= 19)(壓縮了 -11%)
4. 關(guān)于 JAR 文件包的一些技巧
1) 使用 unzip 來(lái)解壓 JAR 文件
在介紹 JAR 文件的時(shí)候就已經(jīng)說(shuō)過(guò)了,JAR 文件實(shí)際上就是 ZIP 文件,所以可以使用常見(jiàn)的一些解壓 ZIP 文件的工具來(lái)解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來(lái)解壓是因?yàn)樗鼈兘鈮罕容^直觀,方便。而使用 unzip,則是因?yàn)樗鈮簳r(shí)可以使用 -d 參數(shù)指定目標(biāo)目錄。
在解壓一個(gè) JAR 文件的時(shí)候是不能使用 jar 的 -C 參數(shù)來(lái)指定解壓的目標(biāo)的,因?yàn)?-C 參數(shù)只在創(chuàng)建或者更新包的時(shí)候可用。那么需要將文件解壓到某個(gè)指定目錄下的時(shí)候就需要先將這具 JAR 文件拷貝到目標(biāo)目錄下,再進(jìn)行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個(gè) -d 參數(shù)即可。如:
unzip test.jar -d dest/
2) 使用 WinZip 或者 WinRAR 等工具創(chuàng)建 JAR 文件
上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創(chuàng)建所需要 ZIP 壓縮包,再往這個(gè) ZIP 壓縮包中添加一個(gè)包含 MANIFEST 文件的 META-INF 目錄即可。對(duì)于使用 jar 命令的 -m 參數(shù)指定清單文件的情況,只需要將這個(gè) MANIFEST 按需要修改即可。
3) 使用 jar 命令創(chuàng)建 ZIP 文件
有些 Linux 下提供了 unzip 命令,但沒(méi)有 zip 命令,所以需要可以對(duì) ZIP 文件進(jìn)行解壓,即不能創(chuàng)建 ZIP 文件。如要?jiǎng)?chuàng)建一個(gè) ZIP 文件,使用帶 -M 參數(shù)的 jar 命令即可,因?yàn)?-M 參數(shù)表示制作 JAR 包的時(shí)候不添加 MANIFEST 清單,那么只需要在指定目標(biāo) JAR 文件的地方將 .jar 擴(kuò)展名改為 .zip 擴(kuò)展名,創(chuàng)建的就是一個(gè)不折不扣的 ZIP 文件了,如將上一節(jié)的第 3) 個(gè)例子略作改動(dòng):

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

以上的長(zhǎng)篇大論估計(jì)各位看官,看得都頭暈?zāi)X脹了吧!

呵呵 來(lái)個(gè)精練,短小精干的! 嘎嘎?

將java程序變成可直接雙擊執(zhí)行的應(yīng)用程序!

1.先建立一個(gè)空文件夾

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:(空格) 包命.類(lèi)名<回車(chē)>??? 保存該文件

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

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

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

?

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

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

用 WinRAR重新覆蓋該文件,100% 比上面的精干方法更簡(jiǎn)潔實(shí)用。

生成Java可執(zhí)行文件


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 庆阳市| 泗阳县| 长乐市| 十堰市| 伊金霍洛旗| 临江市| 罗田县| 龙州县| 抚顺市| 禄劝| 南部县| 扎赉特旗| 通州区| 宜丰县| 岗巴县| 吴江市| 梅州市| SHOW| 灯塔市| 新泰市| 广宁县| 贞丰县| 西乌珠穆沁旗| 阿勒泰市| 左权县| 阿荣旗| 上犹县| 三门县| 来安县| 文成县| 安溪县| 调兵山市| 靖江市| 克拉玛依市| 嘉兴市| 鄂温| 沅陵县| 宣化县| 璧山县| 涟水县| 汉寿县|