Package Project into JAR in Eclipse

印象中早期eclipse提供的jar packing功能很陽春的,就classes下包成jar檔,最多再附個META-INF/MANIFEST.MF。
最近在找比較方便,可以連dependencies都一起打包的機制。結果一查,其實新版(Mars2)已經可以連dependencies一起打包了,不需要用上maven。

File/Export > Runnable JAR file

1. Extract required libraries into genereated JAR

可能是最常見常用的打包方式。
所有dependenies統統解開然後跟build出來的class檔,混在一起包成JAR檔。優點不用說就是狂,簡單粗暴。缺點是META-INF/路徑下混合了所有dependenies解開後的META-INF資料夾,相對混亂,也可能會造成重複檔案覆蓋的問題。

2. Package required libraries into generated JAR

這個跟下面的3有點像,但是把所有dependenies放在jar檔內的根目錄下。
可是jar in jar是無法被java classpath的預設機制使用到的,所以META-INF/MANIFEST.MF裡Main-Class會指定成eclipse提供的org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader及加上Rsrc*設定來載入jar檔並啟動main class。
雖然這是個人覺得比較漂亮的打包,但就像上面說的;多了一層eclipse客制的機制還是讓人覺得有點阿雜。

3. Copy required libraries into sub-folder next to generated JAR

在包出來的JAR檔所在目錄下會建一個跟JAR檔同名的目錄,裡面放相依的dependenies。
JAR檔內的META-INF/MANIFEST.MF裡的Class-Path會指定那些dependenies的相依路徑。只要相對路徑不變,就可以直接用java指定跑程式,缺點就是搬移jar時多一個外部folder要拷貝。