这篇博文是对上一篇博文的修改,目的精简安装包的大小和安装之后占用的空间大小。
前篇中存在的问题:相同的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!