JAVA 秩序制作exe运行程序和安装包方法汇总

用java开发出来的程序,想给用户使用,直接给jar文件,用户没有jre,或者不会配java环境会造成诸多困扰。
于是就想把java打包的可执行jar包打包成exe可执行程序发布,网上理论很多,完整的流程介绍很少,本文介主要绍其过程。


JRE8还是大很多的
JRE6小一些
jre6有93M,压缩后约25M。

1. 精简jre

java8的jre动辄100+M,项目中有大量的不需要使用的包,可以精简掉,笔者试过的有三种方法:

1.1 原始方法(原理):

1.1.1 精简思路:

思路为精简jre的lib目录和bin目录,lib目录中的rt.jar很大,是简化jre的关键:

  1. 首先找到当前Java程序依赖的全部class,包含自身类库/第三方类库,以及JRE中的类库。
  2. 将JRE中不须要的类库文件移除掉,仅仅保留须要的类库。
  3. 将保留下的类库又一次打包。替换已有的JRE文件。
  4. 监测运行时bin目录中用到的程序,删去不需要的(将在1.3介绍)。

1.1.2 精简jre 引用包过程

  1. 如何找到程序加载的class ?使用命令(前提是配置了java path环境变量): java -jar -verbose test.jar >> class.txt,或者 java -XX:+TraceClassLoading MainTest >>class.txt,就可以把用到的class名称路径输出到class.txt文件。
  2. 如何根据class名称复制出加载了的类?使用命令: jar xvf xxx.jar classname1 classname2 ....就会把须要的class从jar中提取出来,拷贝到本地当前文件夹,这里的xxx.jar一般是从jre/lib目录拷贝出来的rt.jar
  3. 将这些类库进行打包成jar ? 使用命令:jar cvf target.jar sourcefolder1 classfolder2 ...
    打包命令,将classfolder中的类库,打包为target.jar.
  4. 编写cmd脚本自动完成拷贝操作 :

对批处理脚本不熟悉,自创代码有错误,未解决暂补贴代码。思路是使用批处理里面的循环和正则处理字符串进行拷贝。使用java程序实现这一步比较容易,此部分不是本文重点,感兴趣请移步其他博主的文章:整理JRE瘦身或精简JRE

1.2使用GreenJVM精简jre

精简jre是一个成熟并且难度比较低的操作,早已有成熟方案,GreenJVM便是其一,GreenJVM提供了精简jre和打包软件成exe的功能,这里主要介绍其精简jre/lib/rt.jar的过程。

  1. ib目录下一个运行Java程序不可或缺的文件是位于i386下的虚拟机配置文件jvm.cfg. 该配置文件用来管理不同版本的jvm.dll.其内容作为java.exe,javac.exe的全局变量,用来加载相应的动态链接库文件.
  2. lib目录里面除了包含程序运行所需要的类库及配置文件外,还包含有一些诸如: 鼠标光标,字体等系统资源.简单程序如果未用到这部分资源的话,可以剔除.
  3. lib\ext下不能全删除,保留这三个才能保证jar启动:
    这里写图片描述
  4. 如果使用了swing,则lib\font下的字体不能全部删除,全删除会导致无法启动swing界面
    这里写图片描述
  5. 因为项目使用了加密算法,lib\security不能全部删除,因为不太大,索性全部保留了
  6. lib下的jar只保留了ccharset和rt,大量配置文件不好判断,也不大,就不删了
    最后效果如下图所示
    这里写图片描述
    这里写图片描述
    效果很显著,jre8精简到原来的1/10体积
    这里写图片描述 这里写图片描述

1.2.1 下载GreeJVM

项目本来是放在谷歌开源上的,之前翻墙下载时发现2009年已经停止更新了,这里提供下载地址:
https://download.csdn.net/download/sinat_34820292/10539847

1.2.2 导出可执行的jar

对于eclipse项目,右键导出成可执行jar文件,注意选择好主类。
这里写图片描述
这里写图片描述

1.2.3使用greenJvm-make创建精简的rt.jar

在配置了JDK环境变量和path路径的前提下,把可执行jar放到这个文件夹,然后如下图修改批处理脚本make.bat,双击运行
这里写图片描述

java -jar GreenJVMMake.jar -t da -i ./你的可执行文件.jar -o ./

jar运行时尽可能多的操作,把所有功能运行一遍,使得工具可以导出尽可能完整的依赖,减小失败率。程序正常结束(比如不是通过任务管理器杀死的)后会在当前目录下生成一个rt.jar,体积会远远小于jre里面的那个几十兆的。

2.精简bin目录

把jre整个目录拷贝出来,然后针对要运行的jar文件进行精简。步骤1.2.3也可以指定某个jre,把make.bat脚本里的java 改成 某个jre/bin目录下的java.exe即可。
如1.1.1所述方法,跟踪运行所需文件,删除不需要,网上有介绍使用360安全卫士跟踪的方案,因使用win10告别第三方杀毒软件已久,我用的别的小软件,dll_killer,还有使用CProcess,SRTask工具的,这里不提供下载地址,请自行搜索下载。
以使用dll_killer为例,把java程序运行时的pid填写进去,dll_killer会跟踪被加载的dll文件,从而可以知道哪些会用到,尝试删除掉没加载到的即可实现精简,(可怜的笔者尝试了一天才删除了没几个文件,想想最后精简失败,用了个完整jre6做出的安装包28M大小,没太大,就看开了)。


2018年7月17日补充: 在程序运行状态下,直接到jre的bin目录下全选删除,提示占用,删不掉的保留即可,亲测可行


这里写图片描述

3. 使用JCB【JAVA应用定制工厂】

JCB功能非常强大,好比前面的方法在用记事本编程序,那么这个相当于给了拟一个IDE。
这里写图片描述
已有博主做了详细的使用教程:
http://www.blogjava.net/cnfree/archive/2013/03/03/395999.html
本文不再赘述

4. 对于一个jar和准备好的jre,使用exe4j封装

步骤并不复杂,初次使用可能会失败,多尝试几次后发现挺好用,如果希望指定某个jre来运行,而不想受环境jre影响,需要如下这一步:
把一个jre包含进来,并且采用相对路径,删去自动使用系统java环境变量的搜索规则。
这里写图片描述
其中这一个可以用来实现开机自启动,但是我是通过后面的Inno Setup实现的自启动:
这里写图片描述
程序管理员权限可以在这一步添加,因为我的程序在win10下会无权写program file下的配置文件,所以赋予程序管理员权限:这里写图片描述

5. 实现开机自动或者以管理员权限运行程序

使用Inno Setup可以创建安装包,实现管理员权限运行安装后的程序,实现开机自启动(经尝试修改注册表,把启动连接放到{userappdata}\Microsoft\Internet Explorer\Quick Launch目录可行),创建图标等操作,网上很多相关资料,很多程序都是使用这个工具做的安装包。需要请自行搜索资料。
#6. 实现单文件免安装程序
思路如下:类似于1.5,使用好压创建一个自解压exe文件,运行时静默把程序文件夹解压到系统缓存目录运行,实现免安装单文件程序效果。

Inno Setup用来创建安装包很方便,使用好压也不错,资料建议上网找,很丰富。
这里写图片描述
这里写图片描述
![这里写图片描述](https://img-blog.csdn.net/2018080811175756?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM0ODIwMjky/font/5a6L5L2T/fontsize/400/fill/I0JBQk

注意:

9月更新:
可以使用PowerBuilder开发基于java的客户端软件


11月更新
基于Eclipse RCP做开发,或者基于SWT开发,都是java比较好的图形化客户端方案,很多成熟java开发的项目,能看到他们的影子,如Hbuilder,Xmind (观察推测)


18年2月更新
补充一些Eclipse做java GUI开发的工具,参考:https://blog.csdn.net/appke846/article/details/79027112

Eclipse并不自带GUI的可视化开发工具,那么如果要在Eclipse进行可视化的GUI开发,就需要依靠第三方的插件。

1. Visual Editor

Eclipse官方提供了一个叫做Visual Editor(VE)的开源GUI插件,功能还是比较强。可以根据用户的界面GUI设计,自动生成相应的JAVA代码。同样也可以通过相应的JAVA代码,生成其匹配的可视化GUI编辑界面。不过VE缺点比较大,我从3.1到3.2之前一直在用VE,没有多少改观。VE是通过另外启动一个JVM来模拟执行GUI的class,然后在Eclipse的界面内生成一个可视化效果。

VE使用起来问题很多,网上有网友直接评价说VE是“可用性不强”。

2. SWT-Designer

SWT-Designer是大家公认的,最强的Eclipse下开发GUI的插件http://www.swt-designer.com/。很多Eclipse书籍上都是直接拿SWT-Designer来讲解如何在Eclipse开发GUI界面程序。不过SWT-Designer是一个收费的插件。不收费的是基础版本,功能受到很大的限制。当然,网上也有完整版的破解版。SWT-Designer做得比较大,6.0最新的安装文件有几十M,可想其功能之强大。

3. jigloo

jigloo严格意义上来说也是收费的,不过他提供了non_commercial的版本,而这个版本的功能和commercial是完全一样的http://www.cloudgarden.com/jigloo/。作为个人开发来说,是不受限制的。jigloo很小,最新的版本才3MB多,安装也比较简单。

jigloo同时支持SWT和Swing。

jigloo也是完全基于Java代码的,不过它的code parse的能力远比VE要强,也要快。至少我很多在VE下出现问题,不能显示的Visual Class可以很好地在jigloo下编辑,至今还没有遇到jigloo不能编辑,parse出错的时候。而jigloo还可以集成了一写比较好的Java GUI风格代码的支持,功能上比VE要强大一些。

当然,3MB多的插件,再强也强不过SWT-Designer完整版的,但是比其基础版的要好很多。而SWT-Designer也并不是完全基于JAVA开发的,比如Windows版本的,还携带了dll文件。而jigloo是完全基于JAVA开发的,下载下来只有一个class的zip文件,也支持Eclipse的在线安装。

二、SWT Designer安装

SWT Designer 即 WindowBuilder的安装

打开Eclipse 3.7 ,选择菜单栏help》 install new software。操作如图:

在这里插入图片描述

在这里插入图片描述

复制步骤一中的在线更新网址:
http://download.eclipse.org/windowbuilder/WB/release/R201309271200/3.7/

输入如图的标记处,enter下

在这里插入图片描述

新建Project 》other》SWT/JFACE JAVA PROJECT (或者其他的项目)

在这里插入图片描述
查看SWT 界面


2019年3月30日更新:

更专业的安装包制作工具

Installshield,Windows installer XML是两个更好的windows安装打包软件
在这里插入图片描述
可以参考这篇文章:https://blog.csdn.net/catshitone/article/details/77802365


2019年7月15日更新:

Adcance installer也是一个不错的安装包制作工具

在这里插入图片描述
可以参考下面这个地址:
https://blog.csdn.net/huwei2003/article/details/7020406

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值