一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

class文件打包

 天天向上跑 2010-11-08
進(jìn)入dos操作符窗口

cd進(jìn)入要打成jar包的class文件所有文件夾目錄

jar cvf [生成jar的名稱.jar] [列出class文件] //若有多個(gè),以空隔隔開

如:

一。操作零散的單個(gè)或幾個(gè)class文件

jar cvf ibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class


二。把一個(gè)文件夾下面的所有class文件打成jar包

jar cvf ibstool.jar * 回車


生成可執(zhí)行jar包:

編譯的class文件中必須有main入口函數(shù)的類方能生成可執(zhí)行jar包,如:

public static void main(String[] args)

生成的方法步驟:

方法一:

1。用上面的方法把class與相應(yīng)的結(jié)構(gòu)目錄打成jar包

2。解壓這個(gè)jar包到當(dāng)前目錄

3。編輯META-INF/MANIFEST.MF,給jar包指定程序入口main函數(shù),內(nèi)容為:

Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
Main-Class: MutiThread (回車)

(注意回車與空格,這個(gè)文件的內(nèi)容排版必須標(biāo)準(zhǔn))

4。再用winzip把這些文件壓縮成jar格式包,或者壓成zip包,再改后綴名為jar也可。


方法二(推薦):
2. 打成可執(zhí)行的jar包
cmd操作窗體中進(jìn)入class文件的根目錄,之所以說根目錄,是因?yàn)橄旅嫫湎旅孢€可以有很多文件包(夾);
在此目錄準(zhǔn)備好一個(gè)manifest.mf文件,其內(nèi)容為:
Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
Main-Class: MainEntry


main-class為指定所有類的main方法所在的類名.
最后用命令: jar cvfm jarname.jar manifest.mf *

3.測(cè)試可執(zhí)行jar包.
用命令:java -jar jarname.jar

4.為可執(zhí)行jar包制作bat文件.
例如 :
@echo off
rem
rem Set BQ_IBS_HOME before running this script.
rem

if not "%BQ_IBS_HOME%" == "" goto CONT0
set BQ_IBS_HOME=c:\ibs
:CONT0

@echo on
java -DBQ_IBS_HOME=%BQ_IBS_HOME% -jar jarname.jar

:END



網(wǎng)絡(luò)引用:

java jar命令
比如您的class包存放路徑為 d:\com\demo (demo是個(gè)目錄,下面含有子文件夾及class文件)

具體操作如下:

1、打開dos窗口,進(jìn)入demo目錄

cd d:\com\demo

2、執(zhí)行 jar cvf demo.jar * 回車

3、在demo目錄下面你會(huì)發(fā)現(xiàn)demo.jar

具體參數(shù)請(qǐng)看下面的解釋:

用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...

選項(xiàng):

-c 創(chuàng)建新的存檔

-t 列出存檔內(nèi)容的列表

-x 展開存檔中的命名的(或所有的〕文件

-u 更新已存在的存檔

-v 生成詳細(xì)輸出到標(biāo)準(zhǔn)輸出上

-f 指定存檔文件名

-m 包含來自標(biāo)明文件的標(biāo)明信息

-0 只存儲(chǔ)方式;未用zip壓縮格式

-M 不產(chǎn)生所有項(xiàng)的清單(manifest〕文件

-i 為指定的jar文件產(chǎn)生索引信息

-C 改變到指定的目錄,并且包含下列文件:

如果一個(gè)文件名是一個(gè)目錄,它將被遞歸處理。

清單(manifest〕文件名和存檔文件名都需要被指定,按'm' 和 'f'標(biāo)志指定的相同順序。

示例1:將兩個(gè)class文件存檔到一個(gè)名為 'classes.jar' 的存檔文件中:

jar cvf classes.jar Foo.class Bar.class

示例2:用一個(gè)存在的清單(manifest)文件 'mymanifest' 將 foo/ 目錄下的所有文件存檔到一個(gè)名為 'classes.jar' 的存檔文件中:

jar cvfm classes.jar mymanifest -C foo/ .


來個(gè)小例子試試看:

我們只有一個(gè)HelloWorld,如下:

public class HelloWorld{
public static void main(String[ ] args){
System.out.println(“Hi, Hello World!”);
}
}

將這個(gè)java文件存到C盤跟目錄下,ok,接下來,

在先前打開的命令提示符下(跳轉(zhuǎn)到C盤提示符下),我們輸入javac HelloWorld.java,然后繼續(xù)輸入:jar cvf hello.jar HelloWorld.class,回車后去你的C盤看看,多了什么,沒錯(cuò) hello.jar 。

基本的步驟我們現(xiàn)在都知道了,你可以自己去嘗試一下隨著jar后面的參數(shù)的不同,結(jié)果有什么變化。
緊接著我們看看如何運(yùn)行我們的jar包。

在進(jìn)入正題之前,你要先打開我們剛剛做好的jar包看看,多了什么呢,META-INF目錄?再看看里面是什么,還有一個(gè)MANIFEST.MF文件是不是?用文本編輯器(我這里是UltraEdit)打開它看看:

Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)


就是這樣。這里我們對(duì)它進(jìn)行修改,加一句:Main-Class: HelloWorld (在第三行)。這個(gè)就是我們之前寫的那個(gè)類,也就是我們的入口類。也即,

Manifest-Version: 1.0
Created-By: 1.4.2 (Sun Microsystems Inc.)
Main-Class: HelloWorld

接下來,我們?cè)诿钐崾痉飯?zhí)行:

jar umf MANIFEST.MF app.jar (應(yīng)該是hello.jar吧)

這樣我們使用了我們自己的MANIFEST.MF文件對(duì)原來默認(rèn)的進(jìn)行了更新。你不妨可以再進(jìn)去看看是不是添上了Main-Class: HelloWorld這一句。 (是嗎,我怎么沒試出來,提示java.io.FileNotFoundException:MANIFEST.MF(系統(tǒng)找不到指定的文件)怎么回事?)

Ok,這個(gè)最后的一步了,來驗(yàn)證我們做的一切,在命令提示符中輸入:

java -jar hello.jar(執(zhí)行)


出現(xiàn)了什么, Hi, Hello World!

我們?cè)賮砜纯磈ar文件在tomcat中發(fā)布,注意:在tomcat中我們就不能再用jar這種格式,而改war格式,它是專門用于web應(yīng)用的,其實(shí)整個(gè)過程下來基本上和jar是類似的:

先準(zhǔn)備我們要打包的資源。

找到存放tomcat的webapps目錄,進(jìn)到其中,新建一個(gè)文件夾,這里命名為hello,再進(jìn)去新建WEB-INF文件夾,再進(jìn)去新建classes文件夾,此時(shí)我們也將我們唯一的servlet,HelloWorld.java放到這里,在與classes目錄同級(jí)下建立一文件web.xml。Ok,目前我們初步建立了一個(gè)簡(jiǎn)單的web應(yīng)用。


關(guān)于 MANIFEST.MF 寫法.


例如我們打包的jar為 Test.jar

Manifest-Version: 1.0

Main-Class: windows.VideoWindow

Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar

上面為打包為jar中的包說明文件. 下面這個(gè)報(bào)錯(cuò)一直出現(xiàn).

could not find main class. Program will exit

這個(gè)錯(cuò)誤提示其實(shí)不是沒有發(fā)現(xiàn)main class. 而是jar如果有錯(cuò)誤執(zhí)行不了,就會(huì)出現(xiàn)這個(gè)錯(cuò)誤. 打包完成后, 要先運(yùn)行 cmd -> java -jar your.jar 確認(rèn)沒有問題即可執(zhí)行jar. 使用-jar參數(shù)后, 系統(tǒng)的Classpath 變量不再起作用. 虛擬機(jī)將去MANIFEST.MF中的Class-Path 下找相關(guān)的包.

然后才能成功的從: windows.VideoWindow 的main方法進(jìn)入. 否則沒有相關(guān)連接包,則會(huì)提示找不到main class. 而大家可能還迷糊的找不到北. 明明有main class嗎.

如果這個(gè)寫的不對(duì). 則就會(huì)一直報(bào)錯(cuò).

看看上面這個(gè)Class-Path: 后面的寫法. 空格分開. 絕對(duì)不能有分號(hào).切記.

最后必須有換行. 這個(gè)也是要注意的. 否則依然提示沒有mainclass.

不要因?yàn)檫@個(gè)小事情耽誤了時(shí)間. 其中 lib/ 表示這個(gè)jar必須在打包Test.jar所在目錄的一個(gè)lib子目錄中.

運(yùn)行jar需要命令: java -jar Test.jar

雙擊也可以, 則使用 javaw 打開.

關(guān)于java -classpath a.jar;b.jar; class test.Test 執(zhí)行時(shí). a.jar;b.jar; 后面都必須有分號(hào). 否則報(bào)錯(cuò). 不要指望不寫classpath讓系統(tǒng)自己找. 這不是在eclipse里面.必須寫上你要使用的類. 否則總會(huì)提示您編譯出錯(cuò).


可以用的上的有:


    1. Main-Class 指定程序的入口,這樣可以直接用java -jar xxx.jar來運(yùn)行程序。

    2. Class-Path 指定jar包的依賴關(guān)系,class loader會(huì)依據(jù)這個(gè)路徑來搜索class。

我平時(shí)用mf文件一般說來都是讓jar成為可以直接運(yùn)行這一目的。雖然目的這么簡(jiǎn)單,但是每次打包還是很容易出現(xiàn)各種各樣的問題讓人頭痛。mf總是沒有被應(yīng)用,或者是出錯(cuò)了。

首先給出一個(gè)簡(jiǎn)單而標(biāo)準(zhǔn)的例子:

Manifest-Version: 1.0
Main-Class: ui.JFrameMain
Class-Path: jtds-1.2.jar c3p0-0.9.1.2.jar
esri_mo20.jar esri_mo20res.jar jsde83_sdk.jar

解釋一下:

Manifest-Version mf文件版本號(hào),這行照抄

Main-Class 包含main函數(shù)的類,程序的入口

Class-Path 用到的一些包

分析一下要點(diǎn):

要點(diǎn)1:每行的“:”(冒號(hào))用來分隔鍵值對(duì)。冒號(hào)后邊一定要跟一個(gè)空格?。?!

也就是說務(wù)必寫為:
  1. Main-Class空格)YouClassName

  2. Class-Path空格)Class1.Jar
復(fù)制代碼
否則JBuilder會(huì)報(bào)("Manifest.mf": Error reading manifest: java.io.IOException: invalid header field
)這樣的錯(cuò)。不再IDE幫助下做的JAR會(huì)發(fā)現(xiàn)MF沒有起到應(yīng)有的作用。順便說一下以前我看到JBuilder報(bào)另一個(gè)個(gè)錯(cuò)大概說是什么換行符不對(duì),好像也是由于這個(gè)問題引發(fā)的。原先總以為是windows里邊的回車是由回車,換行2個(gè)字符構(gòu)成而造成的?,F(xiàn)在看來好像不是這樣,是因?yàn)樯倭嗣疤?hào)后邊那個(gè)空格。

要點(diǎn)2:Class-Path里邊的內(nèi)容用空格分隔而不是逗號(hào)或者分號(hào)。(唉。。。我總是下意識(shí)的用分號(hào))

也就是說務(wù)必寫成:
  1. Class-Path空格)Class1.jar(空格)Class2.jar(空格)Class3.Jar
復(fù)制代碼
要點(diǎn)3:有的文章說MF文件每行不能超過七十多的字符,我的經(jīng)驗(yàn)是如果在JBuilder里編輯MF超過了也無妨,一般我是盡量一行寫完。續(xù)行挺麻煩又要以空格開頭什么的。我也經(jīng)常直接用winRar打開jar然后直接編輯里邊的mf文件,這是個(gè)好方法,很直接了當(dāng),缺點(diǎn)就是如果改壞了也不會(huì)報(bào)錯(cuò),只是MF有的部分失效了,好像運(yùn)行時(shí)也會(huì)說"錯(cuò)誤的MF文件版本"。

介紹幾個(gè)技巧

技巧1:使用winRar打開jar,雙擊MF文件,就可以編輯了,編輯完了Ctrl+S保存。特方便。也可以在外邊寫好一個(gè)Manifest.mf,然后直接拖入覆蓋以前的。

技巧2:寫一個(gè)run.bat來運(yùn)行你的jar。run.bat大體內(nèi)容如下:

java -jar yours.jar

pause

后邊加一個(gè)pause就可以讓你看到具體哪里出錯(cuò)了,一般來說問題如果出在MF上,那么往往就是哪個(gè)包,哪個(gè)類沒有找到的NoClassDef這種異

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品涩涩成人一区二区三区| 嫩草国产福利视频一区二区| 成人午夜激情在线免费观看| 91欧美一区二区三区成人| 国产又粗又长又大高潮视频| 五月婷日韩中文字幕四虎| 激情偷拍一区二区三区视频| 好吊日视频这里都是精品| 少妇人妻一级片一区二区三区| 夫妻性生活动态图视频| 国产一级性生活录像片| 日本人妻精品有码字幕| 欧美日韩精品久久第一页| 国产传媒欧美日韩成人精品| 亚洲最新av在线观看| 福利视频一区二区在线| 爱草草在线观看免费视频| 午夜亚洲少妇福利诱惑| 日韩精品你懂的在线观看| 亚洲男人的天堂色偷偷| 欧美韩国日本精品在线| 日韩精品小视频在线观看| 日韩女优视频国产一区| 亚洲欧美日本视频一区二区 | 欧美中文字幕一区在线| 欧美日韩国产自拍亚洲| 亚洲欧美日韩国产成人| 国产视频福利一区二区| 91福利免费一区二区三区| 自拍偷女厕所拍偷区亚洲综合| 日韩高清一区二区三区四区| 午夜精品国产精品久久久| 欧美自拍偷自拍亚洲精品| 一级欧美一级欧美在线播| 日本熟妇五十一区二区三区| 麻豆欧美精品国产综合久久| 清纯少妇被捅到高潮免费观看| 亚洲综合精品天堂夜夜| 国产精品丝袜一二三区| 九九热这里只有精品哦| 国产欧美亚洲精品自拍|