這篇博文是對上一篇博文的修改,目的精簡安裝包的大小和安裝之後佔用的空間大小。
前篇中存在的問題:相同的JRE打包了兩次,導致安裝包的大小几乎翻了一倍和安裝之後佔用的空間大小也增加了50M多。
原因:仔細看前篇可以發現,使用FatJar打包得到的smarthome0.0.7_fat.jar中已經包含了JRE7u6,然後使用install4j製作安裝包的時候又靜態繫結了JRE7u6
最終得到的安裝目錄如下:【註:圖片是後來截的,其中的jar應該是 smarthome0.0.7_fat.jar 】,一個JRE目錄就有70M多,然而在jar包中還有一個提取出來的JRE在裡面。
目標:只使用一個JRE!
步驟:
1. 不使用FatJar,只是使用Eclipse匯出一個Runnable Jar,一定要是一個可啟動並執行Jar。
但是對於引用的jar包它有三種處理方式:
(1)Extract:提取出來,放在得到的Jar中,也就是將其中的class檔案都取出來,和項目的檔案一同打包!
(2)Package:打包存放在得到的jar中
(3)Copy:複製出來,存放在和得到的jar在同一個目錄下。
這裡選擇第三種方式:Copy!
2. 修改MANIFEST.MF 檔案
在得到的jar中有一個檔案夾 META-INF ,裡面有一個檔案 MANIFEST.MF 檔案,內容如下:
注意其中的Class-Path,它們都是存放在打包產生的那個檔案夾中的jar,其中還包含了JRE中的jar
所以,要做的就是修改這個檔案,按照習慣,一般JRE是存放在jre檔案夾中的,而第三方jar包是存放在lib檔案夾中的。所以,建立lib檔案夾,將項目中的第三方jar包放入其中
jre目錄不用建立,因為最終要用install4j來綁定一個JRE,它會自動在安裝目錄建立檔案夾jre存放綁定的JRE,只要知道有一個jre目錄存在就行,內容就像平時安裝的jre目錄一樣。
將MANIFEST.MF檔案內容修改為:對於第三方jar包的路徑類似 lib/xxxx.jar 對於JRE中的jar包,路徑類似 jre/lib/xxxxx.jar,建議寫在一行,因為容易錯!改完之後,更新jar包即可。
3. 按照前篇中的方式對 smarthome0.0.8_runnableJar_copy.jar 製作installer。依然是static bundle一個JRE,依然是前篇中製作的JRE。
不同的是,這次要添加剛才建立的lib檔案夾,最終的安裝檔案目錄結構為:
註:前篇中的一個Bug。前篇中在 JRE Search Sequence中選擇了一個系統的編譯變數,其實可能是沒有必要的,貌似隨便給一個就行了。以下是我在install4j的協助文檔中看到的內容:
內容總結:
1. 靜態繫結的JRE是會隨著你的應用程式一起部署的,並且它是“綠色”的,不會修改註冊表;
2. 如果靜態繫結的JRE是不共用(建議選擇這種方式)的話,那麼在安裝目錄下建立一個jre檔案夾,並解壓綁定的JRE的內容到其中,這個JRE是其他的應用程式“看不到”的;
3. 如果是靜態繫結JRE,那麼install4j就會自動的將這個靜態繫結的JRE作為JRE Search Sequence中的第一項。所以,如果是靜態繫結的話,其實Search Sequence可以隨便選擇一個。
有時候安裝時需要詢問使用者是否建立案頭捷徑,這個也可以在install4j中配置,方法如下:
在Intaller介面中的第一個介面 Screens and Actions中選擇 Register Add/Remove item,點擊綠色添加按鈕,如下所示添加 Add a desktop link
出現如下左邊的詢問框,確定即可,之後就會多出兩個東西,如右圖所示
然後再配置Target file,也就是前面建立的 launcher!
4. 完了之後,得到的安裝檔案是30M左右,大約是之前的一半,安裝新的版本之後,佔用的磁碟空間是110M左右,減少了50M多!
運行之後的目錄結構:
O(∩_∩)O哈哈~ Enjoy the world of JavaFx!