如果需要一個可以單獨運行的jar包“Runnable JAR file”,省事的方法是妥妥的選擇打一個可運行的jar包“Runnable JAR file”。如此一來,就可以把程序運行所依賴的類、第三方jar包等資源整合到一個單獨的jar包中,使用“java -jar xxx.jar”命令等方式可以直接執行程序。注意這種方式需要選擇工程中的一個運行配置(Launch configuration),只要之前用Eclipse執行過該程序即可自動生成該配置。
值得注意的是,一個可運行程序依賴的jar包可能會有很多,如果每個程序都把依賴的jar包整合在自己的jar包中,顯然是對存儲空間和運行效率的浪費。我們可以選擇將程序打包成普通jar包“JAR file”,選擇要打包的資源時,只選擇程序源文件等必要的資源,而不選擇包含第三方jar包的文件夾。注意選擇程序的入口類(主類),當然也可以手動修改清單文件MANIFEST.MF來指定主類。
將多個程序可能依賴的jar包集中放置在一個單獨的文件夾中,然后修改jar包中“META-INF”目錄下的“MANIFEST.MF”清單文件。該文件的“Main-Class”屬性指定了程序的主類,“Class-Path”屬性則指定了運行主類所依賴的外部類的路徑。將類路徑配置在清單文件中的好處是,運行jar包時可以省去一長串的classpath參數。
manifest為文件格式:
Manifest-Version: 1.0
Main-Class: com.hejing.paserTsp.ShowResultFrame
Class-Path: lib/commons-beanutils-1.8.0.jar
lib/byte-buddy-1.7.5.jar
lib/client-combined-3.8.1.jar
lib/client-combined-3.8.1-sources.jar
lib/commons-codec-1.10.jar
lib/commons-collections-3.2.1.jar
lib/commons-exec-1.3.jar
lib/commons-lang-2.5.jar
lib/commons-logging-1.1.1.jar
Manifest-Version指程序的版本號
Main-Class指程序主方法的入口類
Class-Path指外來jar包的位置
這個文件的編寫需要遵循嚴格的規范。
- 第一行不能空,行與行之間不能有空行,每一行的最后一個字符不能是空格。
- 最后一行一定是空行。
- 每個屬性的名稱和值之間(冒號后面)一定要有空格。
- 文件的每一行都不能超過72個字節(一般是70個ASCII字母加上回車換行符);如果72個字節不夠用,則另起一行並以空格開頭:以空格開頭的行都被視為前一行的續行,不要使用TAB鍵,否則會報錯:invalid header。
- Class-Path屬性指定的類或jar包是本地的文件,不可以是遠程訪問的類或者JAR包文件中的JAR包,即不能是jar in jar,當然也就不能是本jar包中包含的jar包。要實現對jar in jar的引用,需要自定義相關代碼來讀取它們。上面提到的RunnableJAR file之所以能夠運行,就是因為Eclipse為我們提供了jarinjarloader,來幫助我們讀取jar in jar。