本文說明如何使用eclipse+fjep外掛程式打包java工程為一個單一的可執行jar,使得即使使用了額外三方的jar也能發布單一的jar
fjep :http://fjep.sourceforge.net/
fjep tutorial(http://fjep.sourceforge.net/fjeptutorial.html)說明了如何用fjep打包,fjep的工作是展開三方的jar,直接將三方classes以檔案夾(package)的形式打入客戶jar
比如:客戶工程為fjepdemo(僅一個java檔案:fjepdemo/Demo.java),使用了一個lib(jar)為fjeplib.jar(包含:fjeplib/lib.class),用fjep打包後的檔案結構如下:
fjepdemo.jar
/fjepdemo/Demo.class
/fjeplib/lib.class
fjeplib.jar在新發布的jar中不再以jar的形式出現。
假如三方的jar規定不允許修改發布,就不能這樣展開處理,此時可用one-jar處理,“ The One-JAR option integrates a specialised Class-Loader written by Simon Tuffs ( http://one-jar.sourceforge.net/ ) which handles jar-files inside a jar.”
one-jar已整合到fjep中,打包中可勾上複選框 one-jar,此時fjeplib被打到fjepdemo.jar/lib/fjeplib.jar中, 客戶並未對三方的jar進行任何修改。
另外,假設工程用到了額外的資源檔,比如IO操作,要讀寫一個txt檔案,則不能以普通的檔案路徑來讀寫。package fjepdemo;
import fjeplib.Lib;
import java.io.*;
public class Demo ...{
/** *//**
* @param args
*/
public static void main(String[] args) throws IOException...{
// TODO Auto-generated method stub
Lib.print();
InputStream is = Demo.class.getResourceAsStream("/1.txt");//注意資源檔的路徑
System.out.println(is.available());
}
}
最後打包之後的檔案結構如下
fjepdemo.jar
/META-INF
...
/main
...
/lib
fjeplib.jar
/com
...//one-jar的內容
1.txt
控制台運行該jar>java -jar fjepdemo.jar
可參考:
http://fjep.sourceforge.net/
http://one-jar.sourceforge.net/
http://www-128.ibm.com/developerworks/cn/java/j-onejar/