Java 打包Jar,One-Jar,將引用jar檔,包進jar檔中

摘要:Java 打包Jar,One-Jar,將引用jar檔,包進jar檔中

因為引用太多外部jar檔,

但交付時,希望檔案越少越好,也不希望別人看到我們引用了哪些檔案。

 

這時候會需要包jar檔,並且jars to jar,或 jar to jar 這樣,包成one-jar。

 

網路有神人寫了文章,如何One-Jar Quick Start ,我使用了他的Command導向的包jar方式,就不需要ant

http://sundoctor.iteye.com/blog/1290496

 

就自己寫寫批次檔,然後去跑就好了。

以下是我包jar過程。

 

首先你要包自己的jar檔,應該是不用寫manifest一樣行的通。

包自己的jar只需要下以下指令

jar cf jar-file-name input-file(s)

介紹一下jar後面的cf是什麼意思,

c 是create的意思,建立jar

f 是輸出成檔案的意思。

 

而還有jar tf jar-file,

t 是 table

就是列出jar檔包的內容

 

而jar xf jar-file

x 是 extract ,截取,或解壓縮的意思。

 

包jar相關語法可到官方文件查看

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

 

input-file(s)

你可以直接的指定資料夾 或使用 *.class

如果只有資料夾的話,就就會自動將資料夾及資料夾底下的子資料夾全部包進去。

 

當產生jar檔後

假設為sample.jar好了。

 

然後再依照神人寫的文章

 

建立

root

root/main

root/lib

 

將sample.jar放置root/main裡

將引用的lib放置root/lib裡

 

這樣就會有

root

root/main/sample.jar

root/lib/  ......A.jar  B.jar

 

另外取得建立one-jar的jar檔。

http://one-jar.sourceforge.net/index.php?page=downloads&file=downloads

下載one-jar-boot-0.97.jar

並解壓縮後,將資料放置root底下,將src砍掉

就會如以下

root/

root/com/....

root/doc/....

root/lib/A.jar B.jar ....etc

root/main/sample.jar

root/META-INF/....

root/.version

root/boot-manifest.mf

 

然後打開boot-manifest.mf

加入啟始Main-Class 及Class-Path

 

One-Jar-Main-Class: MainStart
Class-Path: . config/
 
Class-Path,跟一般一樣。因為我有需要將properties,移出來,放置config,所以我Class-Path 會寫config/
表示我執行的地方的config資料夾下有我要的資源檔。
 
然後就再包一次jar,這時候就會變成one-jar
接著cd 到root 底下
jar -cvfm ../sample-one-jar.jar boot-manifest.mf .
 
這樣就完成了~~