用法: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 只存儲方式;未用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/ .
PS:
使用該命令時(shí)可能會(huì)遇到的問題
如上面的示例2. 在windows環(huán)境下,對整個(gè)文件夾打包時(shí)可能會(huì)出現(xiàn)找不到main class。
測試環(huán)境如下:
操作系統(tǒng):windows xp
jdk版本:1.6
假設(shè)你的待打包的類的根目錄是“d:\workspace\com”,main類的路徑是“d:\workspace\com\java\test.class”。
那么當(dāng)你的命令行在“d:\workspace>”下如示例2般對整個(gè)com文件夾進(jìn)行打包,運(yùn)行“jar cvfm test.jar mymanifest -C com/ .”命令時(shí),生成的test.jar運(yùn)行時(shí)會(huì)出現(xiàn)“找不到main class”的錯(cuò)誤。
用壓縮軟件打開該jar包,會(huì)發(fā)現(xiàn)在點(diǎn)開“com”文件夾時(shí),除了“..”(返回到上層目錄)外,還會(huì)出現(xiàn)“./java”和“.”這兩個(gè)文件夾。正常情況下應(yīng)該是“..”和“java”才對。這樣破壞的了原來的路徑。
解決方案:
1、在“d:\workspace>”目錄下運(yùn)行“jar cvfm test.jar mymanifest com”命令;
2、在“d:\>”目錄下運(yùn)行“jar cvfm test.jar mymanifest -C workspace\ .”或“jar cvfm test.jar mymanifest -C workspace .”命令(前提是workspace下只有com這么一個(gè)文件夾,因?yàn)樵撁畈粫?huì)把workspace給包含進(jìn)去,而是對workspace中的內(nèi)容進(jìn)行打包;或者把com文件夾放到另一個(gè)新建的文件夾中)。