java打成jar包
下面是jar指令的幫助說明:
用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
選項包括:
-c 建立新的歸檔檔案
-t 列出歸檔目錄
-x 解壓縮已歸檔的指定(或所有)檔案
-u 更新現有的歸檔檔案
-v 在标準輸出中生成詳細輸出
-f 指定歸檔檔案名
-m 包含指定清單檔案中的清單資訊
-e 為捆綁到可執行 jar 檔案的獨立應用程式
指定應用程式入口點
-0 僅存儲;不使用任何 ZIP 壓縮
-M 不建立條目的清單檔案
-i 為指定的 jar 檔案生成索引資訊
-C 更改為指定的目錄并包含其中的檔案
如果有任何目錄檔案,則對其進行遞歸處理。
清單檔案名、歸檔檔案名和入口點名的指定順序
與 "m"、"f" 和 "e" 标志的指定順序相同。
示例 1:将兩個類檔案歸檔到一個名為 classes.jar 的歸檔檔案中:
jar cvf classes.jar Foo.class Bar.class
示例 2:使用現有的清單檔案 "mymanifest" 并
将 foo/ 目錄中的所有檔案歸檔到 "classes.jar" 中:
jar cvfm classes.jar mymanifest -C foo/ .
下文假設編譯後的class檔案在bin目錄下
一、打包成一般的jar包(非可執行jar包)
eg1:進入指定目錄并将該目錄下的所有檔案打包:
[[email protected] bin] pwd
/home/zhu/workspace/hadoop/bin
jar cvf wordcount.jar . 或 jar cvf wordcount.jar ./ 或 jar cvf wordcount.jar ./*
以上三個指令都一樣,"."表示将目前目錄(/home/zhu/workspace/hadoop/bin)下的所有檔案打成jar包,生成的wordcount.jar包在目前的操作目錄(/home/zhu/workspace/hadoop/bin)
eg2.在任意目錄打包非目前目錄(即不是你所在的任意目錄)下的檔案:
[[email protected]zhu] pwd
/home/zhu
jar cvf wordcount.jar -C /home/zhu/workspace/hadoop/bin .(或”./“或”./*“)
注意:
1.”.“表示将/home/zhu/workspace/hadoop/bin目錄下的所有檔案打包,注意”.“不能寫錯,如果寫成了”../“則表示将bin目錄的上級目錄及/home/zhu/workspace/hadoop目錄下的所有檔案打包,如果這樣子的話,最後生成的jar包的包路徑就多了一個bin,如bin/org/zhu/hadoop/WordCount.class,正确的應是org/zhu/hadoop/WordCount.class。
2.上述操作生成的wordcount.jar檔案在目前操作目錄下(/home/zhu),而不是在/home/zhu/workspace/hadoop/bin下,也即是說你在什麼路徑下執行jar指令最後生成的jar包就在什麼路徑。
二、打包成可運作的jar包
要打包成可運作的jar包,有三種方法:
一是手動建立MANIFEST.MF檔案,并在其中指定主類,然後執行jar cvfm xxxx.jar MANIFEST.MF(注意該檔案的路徑) (-C class路徑 ). ;
二是使用jar的-e參數指定可運作jar包的入口點(即main類的完全名稱),即指令jar cvfe xxx.jar 主類全名稱 (-C bin/) .
三是先使用上文中"一、打包成一般的jar包(非可執行jar包)"中的方法打包成一般的jar包,然後用壓縮工具打開META-INF/MANIFEST.MF檔案,并修改其内容,加上Class-Path和Main-Class參數值。
eg:建立一個工程,結構如下,在Print.java程式中列印"hello word"
[[email protected] Test]$ cd ~/workspace/Test
pwd:
/home/zhu/workspace/Test
[[email protected] Test]$ ls :
bin src
1.方法一:手動建立MANIFEST.MF檔案并執行jar cvfm指令打包:
(1).建立MANIFEST.MF檔案并編輯:
[[email protected] Test]$ touch MANIFEST.MF
MANIFEST.MF内容如下:
- Manifest-Version: 1.0
- Created-By: zhuxun
- Class-Path: .
- Main-Class: hello.Print
注:主類名必須把包路徑也加上(即填寫完整的類路徑)
說明:
第一行指定清單的版本,若無,則JDK預設生成:Manifest-Version: 1.0
第二行指明建立的作者,若無,則JDK預設生成Created-By: 1.6.0_22(Sun Microsystems Inc.)
第三行指定主類所在類路徑,
第四行指明程式運作的主類
(2).執行jar cvfm指令:
[[email protected] Test]$ jar cvfm hello.jar MANIFEST.MF -C bin/ .
說明:
參數f:指定打包後的包名。
參數m:指定自定義的MANIFEST.MF清單檔案,否則,JDK會自動生成不包含Main-Class的預設清單。
參數c:指定是建立新的歸檔檔案。
參數v:在标準輸出中生成詳細輸出,該選項是可選的。
這時會在目前目錄(/home/zhu/workspace/Test)下生成hello.jar
解壓hello.jar并檢視META-INF/MANIFEST.MF檔案,内容如下:
Manifest-Version: 1.0
Created-By: zhuxun
Class-Path: .
Main-Class: hello.Print
運作hello.jar:
[[email protected] Test]$java -jar hello.jar
hello world
2.方法二:使用jar的-e參數指定可運作jar包的入口點(即執行jar cvfe指令指定主類):
[[email protected] Test]$ jar cvfe hello.jar hello.Print -C bin/ .
注:主類名必須把包路徑也加上(即填寫完整的類路徑)
說明:
這時會在目前目錄(/home/zhu/workspace/Test)下生成hello.jar
解壓hello.jar并檢視META-INF/MANIFEST.MF檔案,内容如下:
Manifest-Version: 1.0
Created-By: zhuxun
Main-Class: hello.Print
注:此種方式生成的MANIFEST.MF檔案中沒有Class-Path參數
[[email protected] Test]$ java -jar hello.jar
hello world
3. 方法三:先使用上文中"一、打包成一般的jar包(非可執行jar包)"中的方法打包成一般的jar包,然後用壓縮工具打開META-INF/MANIFEST.MF檔案,并修改其内容,加上Class-Path和Main-Class參數值,參考如下: Class-Path: .
Main-Class: hello.Print
注:此 種方法有點太麻煩了,不推薦使用。
另外可以使用Eclipse的Export功能完成打包:
一、打包成一般的jar包:
步驟如下:
1)在要打包的項目上右擊,選擇Export
2)在彈出的視窗中,選擇Java -> JAR File,然後點選next按鈕
3)在JAR File Specification視窗中,設定打包成的檔案名和存放位置,點選兩側next
4)在JAR Manifest Specification視窗中,設定MANIFEST.MF清單檔案的配置,
若僅僅打包成單純的jar包的話,不用做任何修改,采取預設即可
若打包成可執行jar包的話,可以使用已存在的MANIFEST檔案或者直接選擇Main class
5)點選Finish按鈕,完成打包。
二、打包成可運作的jar包
步驟如下:
1)在要打包的項目上右擊,選擇Export
2)在彈出的視窗中,選擇Java -> Runnable JAR File,然後點選next按鈕
3)在Runnable JAR File Specification視窗中,選擇Launch configuration和Export destination
4)點選Finish按鈕,打包完成。