`
王者之剑
  • 浏览: 194531 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论

Java程序—如何精简JRE或者生成exe

阅读更多

(对不起,这里没有答案。)

时至今日,仍然有人在问这样的问题。

且不说现在100M不到的东西相对于硬盘来说根本不值一提。

JRE允许发布的前提中的一条就是要保持完整性。

 

你如果要做一个小的,可执行的Java程序,最好的办法就是自己根据JVM规范写一个。

但是写完以后你会发现小不了,除非你做的连玩具都不是。

 

精简JRE还可以说是为了省硬盘,做成exe是为了什么?

 

谁知道?

分享到:
评论
60 楼 hexin46373 2013-03-18  
对楼主这种标题党表示深深的鄙视!

浪费好多人的时间,鄙视之!
59 楼 zlotus 2012-11-13  
jre瘦身后 要多测测不同的机器, 容易出问题。没找到好的解决办法
58 楼 snow284885069 2012-11-07  
楼主改改标题吧,耽误我好长时间,没有获取有用的信息,就看到斗嘴了。
我们客户需要我们用java开发应用,windows平台上需要封装exe运行,也许楼主没遇到过这样的需求,可是我们正在面临这样的问题。对于我们来说,这是一个120万多万的项目。
57 楼 huguohuan 2012-04-12  
楼主生活在一个自以为是的世界里。自己没有这样的需求,也不允许别人有。  
56 楼 zeroblue 2012-03-08  
虽然是个老帖子了,我来吐槽下:
openoffice 做成exe是为了什么呢? netbeans做成exe是为了什么呢?
openoffice自己精简了一个jre又是为了什么呢?

您明明是在吐槽,却起了个标题叫:Java程序—如何精简JRE或者生成exe
他妈的明明就是在坑爹又是为了什么呢?
55 楼 王者之剑 2009-04-14  
Julysea 写道
LZ的 Blog 给出的说法不敢苟同。
精简JRE不是为了省硬盘。精简JRE,做EXE都是为了方便使用,方便交流。
举个实在的例子。
我有一个IPod touch 2。发现了一个很好的软件NoteBookS,很好的笔记软件。但是好果它不支持与电脑同步,或是同步操作非常麻烦,我就会放弃了。同步备份应该是个好习惯吧。
NoteBookS是支持同步的,巧的是同步软件是用Java完成的。我试了一下,很方便。我就想推荐给其他的朋友。发了个贴子,说了这个软件的好处,但说到需要JRE。9个人回帖9个人放弃。
但是如果有这样的JRE只要让软件方便运行,方便传输,大概2-3MB大小,问题就解决了。
当然,你做Java开发无所谓。可是你想到用用户了吗?

首先感谢你参与讨论。

做一个精简的JRE很难吗,关键是没有价值,你愿意为了那9个用户做一个精简的JRE吗?
同步对他们来说真的那么重要吗,如果很重要,他们早就试着装了。
下载一个JRE花1小时,再装上花1小时。
如果他们的工资是4000每月,每月工作20天,一天工作8小时,那么他们每小时是25元,
花两个小时整这个JRE损失的是50元。
同步备份对他们来说根本不值50元,知道不?
我这个贴子确实是站在程序员的立场上写的,希望大家不要无谓的浪费或被浪费生命。
做有价值的事情,你的人生才有价值。


54 楼 Julysea 2009-04-14  
LZ的 Blog 给出的说法不敢苟同。
精简JRE不是为了省硬盘。精简JRE,做EXE都是为了方便使用,方便交流。
举个实在的例子。
我有一个IPod touch 2。发现了一个很好的软件NoteBookS,很好的笔记软件。但是好果它不支持与电脑同步,或是同步操作非常麻烦,我就会放弃了。同步备份应该是个好习惯吧。
NoteBookS是支持同步的,巧的是同步软件是用Java完成的。我试了一下,很方便。我就想推荐给其他的朋友。发了个贴子,说了这个软件的好处,但说到需要JRE。9个人回帖9个人放弃。
但是如果有这样的JRE只要让软件方便运行,方便传输,大概2-3MB大小,问题就解决了。
当然,你做Java开发无所谓。可是你想到用用户了吗?
53 楼 jack945 2008-06-27  
个人认为,要EXE是为了方便广大用户吧...
52 楼 王者之剑 2008-06-20  
目录不够详细,假认bin下只需要列出来的文件的话,那bin的简化就不用考虑了。
java.exe javaw.exe java.dll awt.dll client\jvm.dll压缩成zip不到2M(是不是还是大?)
51 楼 王者之剑 2008-06-20  
JVM规范
http://java.sun.com/docs/books/jvms/
JDK的目录结构
http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/jdkfiles.html
http://java.sun.com/j2se/1.5.0/docs/tooldocs/linux/jdkfiles.html
http://java.sun.com/javase/6/docs/technotes/tools/windows/jdkfiles.html
http://java.sun.com/javase/6/docs/technotes/tools/linux/jdkfiles.html
50 楼 王者之剑 2008-06-20  
生成EXE我认为无聊到极点,大多数人也没有非要生成EXE,就算了。
精简jre看来很多人有需要。这个贴子浏览量已过6000,在google里搜索“精简JRE",已经排到了第一条。
不说点儿什么,好像太那个了,就和大家探讨一下如何精简JRE(我没有做过这种事,写的都是我这会儿的想法)。
假设随意精简JRE是被允许的。
1.最小的jre肯定是我们写的应用程序运行必须用到的文件。因此通用的精简的jre是不存在的。因为我们没有用到的class尽量不要打包进来。
2.如果能找出项目用到的所有class,那么有助于问题的解决。解决这个问题需要做两件事:1)解析class文件,找到import的class名。2)解析jar文件,把用到class给复制出来。只要读JVM规范就可以。(暂不考第三方包可能存在的被混淆情况)
3.不可能每个jre的精简都是一样的,尤其是还有不同厂家的。这里以sun 的windows jdk1.6的jre 为例。可以看到,除了lib下面的jar文件外,还有许多其他文件,bin下面也有很多dll。因此需要有文件的说明,否则不好精简这些东西。
4.如果java命令能提供有用的信息,那么可能有一定帮助。-verbose这个可以打印类的信息。但是各位都号称项目大大的,所以全部功能运行一遍不大现实。还是用上面的解析class文件好一些。-client -server -hotspot的说明,可以认为bin下面的sever可以不要,减去了3M,client目录下面有个文件太大了,能不要就好了。不能确信。
5.除了应用程序用到的class以外,系统会不会有一些应用程序没用到,自己必须的class。
6.最狠的方法当然是只把class里用到的方法和变量,dll里用到的函数打包。
综上,熟读JVM规范和找到sun对于自己jdk的文件说明基本就可以精简jre了。
49 楼 fxbird 2008-06-18  
试试jet吧,可以生成dll,exe
48 楼 王者之剑 2008-06-18  
54powerman 写道
楼主难道打印个hello world这么简单的程序也愿意接受100M的大小??别抬杠,有时应用就这么简单。

并且,不是所有用户都有jre,jre毕竟不是.net framework;
也不是所有程序都是写给自己用的。

hello world用javascript写就可以了。
做成helloword.html
也跨平台。
47 楼 王者之剑 2008-06-18  
sslaowan 写道
王者之剑 写道
Nighthaven 写道
王者之剑 写道
Nighthaven 写道
因为很多用户的电脑上没有合适版本的jre。用一个软件的同时必须安装另外一个软件(jre)会给人一种流氓软件强行捆绑的感觉,而很多用户对此很抵触。更不要提用户电脑上的jre版本千变万化(有没有jre,是微软的还是sun的,是1.4还是1.6),与其大费周章强迫其安装你的软件所需要的版本,不如省心点把jre内置在产品里算了。

当然内置jre就牵扯到jre的大小问题,一个5m的软件内置一个10多m的jre……也许硬盘不在乎,但是对下载时间的影响还是非常明显的,软件下载的时候,用户的耐心是很有限的,所以越小越好。

至于证书的问题,连android都能发布~!无论你修改过的jre多么不符合java规范,只要你不把它叫成是java,那就不会有人管你~

android的发布协议不清楚,好像是开源免费的,至于能不能任意删减,增加,替换,然后重新编译,就不清楚了。
如果在你的产品中不提java,跨平台,可能是没人管。
但是如果自己修改sun的jre,在修改的时候就已经违反协议了,只不过你不发布,不商用,没有人能知道罢了。

为什么要用java做桌面应用呢,
个人觉得在windows下做桌面应用,可以用VB代替Java,现在用C#更快。

java做桌面应用还是不错的。拿游戏来说,windows平台的竞争者太多,小公司做个游戏卖不出去几份。如果兼容linux和mac,由于竞争对手相对较少,就相对容易卖出去。尤其是linux用户,对于游戏的渴望简直……当然linux和mac用户本身就很少,不过对于小公司来说,还是多少有些补益的。
而且就算不考虑跨平台,java因为有很多开源或者不开源的库可以用(尤其是和网络有关的库),还是挺好用的。当然还有一些人喜欢客户端和服务端使用同样的技术。1.6之后,java做桌面的劣势主要是jre最新版本的普及率过低。对于电信之类的大企业内部,由于jre很容易普及,swing(swt)做桌面还是挺流行的。

要生成exe什么的,应该不是大企业的要求:)
不是说java不能做桌面应用,而是说不要去研究怎样生成exe,这样的屠龙之技,大家不要学。
要学最有价值的部分,才不会浪费时间,才能让自己有价值。
那这种事总要有人做吧?
用一位大姐的话说:让没有看到这个讨论的人去做吧!


只是你没见过这样的大企业应用罢了,例如我们的项目就需要支持多种客户端,有一种表现层就是RCP,本来程序打包成exe才10多兆,但是我要带个一百多兆的jre,很苦恼。

大企业应用不是上门服务?
再不济也得搞张光盘,不然好意思卖几十万上百万?
难道真的让大企业信息部门的人自己下载安装?
有什么苦恼的?
46 楼 sslaowan 2008-06-18  
王者之剑 写道
Nighthaven 写道
王者之剑 写道
Nighthaven 写道
因为很多用户的电脑上没有合适版本的jre。用一个软件的同时必须安装另外一个软件(jre)会给人一种流氓软件强行捆绑的感觉,而很多用户对此很抵触。更不要提用户电脑上的jre版本千变万化(有没有jre,是微软的还是sun的,是1.4还是1.6),与其大费周章强迫其安装你的软件所需要的版本,不如省心点把jre内置在产品里算了。

当然内置jre就牵扯到jre的大小问题,一个5m的软件内置一个10多m的jre……也许硬盘不在乎,但是对下载时间的影响还是非常明显的,软件下载的时候,用户的耐心是很有限的,所以越小越好。

至于证书的问题,连android都能发布~!无论你修改过的jre多么不符合java规范,只要你不把它叫成是java,那就不会有人管你~

android的发布协议不清楚,好像是开源免费的,至于能不能任意删减,增加,替换,然后重新编译,就不清楚了。
如果在你的产品中不提java,跨平台,可能是没人管。
但是如果自己修改sun的jre,在修改的时候就已经违反协议了,只不过你不发布,不商用,没有人能知道罢了。

为什么要用java做桌面应用呢,
个人觉得在windows下做桌面应用,可以用VB代替Java,现在用C#更快。

java做桌面应用还是不错的。拿游戏来说,windows平台的竞争者太多,小公司做个游戏卖不出去几份。如果兼容linux和mac,由于竞争对手相对较少,就相对容易卖出去。尤其是linux用户,对于游戏的渴望简直……当然linux和mac用户本身就很少,不过对于小公司来说,还是多少有些补益的。
而且就算不考虑跨平台,java因为有很多开源或者不开源的库可以用(尤其是和网络有关的库),还是挺好用的。当然还有一些人喜欢客户端和服务端使用同样的技术。1.6之后,java做桌面的劣势主要是jre最新版本的普及率过低。对于电信之类的大企业内部,由于jre很容易普及,swing(swt)做桌面还是挺流行的。

要生成exe什么的,应该不是大企业的要求:)
不是说java不能做桌面应用,而是说不要去研究怎样生成exe,这样的屠龙之技,大家不要学。
要学最有价值的部分,才不会浪费时间,才能让自己有价值。
那这种事总要有人做吧?
用一位大姐的话说:让没有看到这个讨论的人去做吧!


只是你没见过这样的大企业应用罢了,例如我们的项目就需要支持多种客户端,有一种表现层就是RCP,本来程序打包成exe才10多兆,但是我要带个一百多兆的jre,很苦恼。
45 楼 xieke 2008-06-17  
BeanSoft 写道
受不了你们了,难道作为JavaEye上的高手学会的就只有磨嘴皮子?帖子标题建议改为:精简JRE是否有必要 比较妥当。

我来列一下我收集的精简JRE:

可以运行 RCP/Swing 的迷你JRE 6(3.75MB) http://www.blogjava.net/beansoft/archive/2008/01/18/176353.html

可以运行SWT的精简版JRE 1.4.2_04, 压缩后仅1.3MB
http://www.blogjava.net/beansoft/archive/2007/03/07/102381.html



这个能运行的swing jre6 太狠了  , 连 JProgressBar 都精简了 ,叫人怎么用阿
44 楼 54powerman 2008-06-16  
楼主难道打印个hello world这么简单的程序也愿意接受100M的大小??别抬杠,有时应用就这么简单。

并且,不是所有用户都有jre,jre毕竟不是.net framework;
也不是所有程序都是写给自己用的。
43 楼 王者之剑 2008-06-15  
BeanSoft 写道
受不了你们了,难道作为JavaEye上的高手学会的就只有磨嘴皮子?帖子标题建议改为:精简JRE是否有必要 比较妥当。

我来列一下我收集的精简JRE:

可以运行 RCP/Swing 的迷你JRE 6(3.75MB) http://www.blogjava.net/beansoft/archive/2008/01/18/176353.html

可以运行SWT的精简版JRE 1.4.2_04, 压缩后仅1.3MB
http://www.blogjava.net/beansoft/archive/2007/03/07/102381.html

没见过高手
替用得着的兄弟感谢你提供的资料。
42 楼 BeanSoft 2008-06-15  
受不了你们了,难道作为JavaEye上的高手学会的就只有磨嘴皮子?帖子标题建议改为:精简JRE是否有必要 比较妥当。

我来列一下我收集的精简JRE:

可以运行 RCP/Swing 的迷你JRE 6(3.75MB) http://www.blogjava.net/beansoft/archive/2008/01/18/176353.html

可以运行SWT的精简版JRE 1.4.2_04, 压缩后仅1.3MB
http://www.blogjava.net/beansoft/archive/2007/03/07/102381.html
41 楼 dobetter 2008-06-15  
很有意思,继续讨论

相关推荐

    Java 打包jar生成exe(极限精简完全攻略)

    大家都知道,通常Java程序需要JVM与OS互动才能运行于本地环境之上,所谓鱼与熊掌不可兼得,这样做虽然极大降低了程序的移植难度,却同时增加了程序的环境要求,因为无论你用什么方法,总需弄个虚拟机才能让你的Java...

    exe4j+精简jre实例

    笔者精简了jre,并给出一个可用实例,笔者有一个java项目,已经对jre进行精简,制作了可执行包,从140M减到了20M,在精简jre的过程中,笔者也写了一些脚本和代码,旨在过程化该解决方案, 但是由于使用了exe4j,而...

    idea将Java项目打包Jar包生成exe应用程序.docx

    o给生成的exe可执行文件取名,如果想生成自定义图标,那么选择你的ico文件,如果你不想在一台电脑上运行多个你的程序,你可以勾选“Allow only a single…”。o点击next,然后出现下面界面。输入Java最小Jre版本号,...

    Java Portable 1.8.0.181 绿色便携精简JRE & JDK &

    Java Portable 1.8.0.181 绿色便携精简JRE, jPortable在线安装后提取版。最大化保持功能版。7z压缩后44M解压后162M。可配合便携版360极速浏览器,firefox等浏览器使用,使便携式java随时可用

    精简 jre 效果程序

    精简 jre 效果 程序

    exe调用java 脱离jre

    一款真正脱离JRE环境,通过JNI调用自己的JAVA代码的可执行程序exe,可把jar打包进exe.

    精简版jre.zip 64位 1.8.0压缩后才20M

    适合需要通过java开发桌面程序的小朋友

    精简jre步骤 迷你jre制作过程

    运行java -verbose:class -version > temp.java 命令,此时在bin目录下生成了一个temp.java文件,用EditPlus打开,看到没有,要加载的就是那些类了,把不需要的全部删除就是了。 15. 原来charsets.jar没有加载呀。...

    Java8新特性之精简的JRE详解_动力节点Java学院

    Java8新特性之精简的JRE详解_动力节点Java学院,动力节点口口相传的Java黄埔军校

    制作桌面软件exe执行文件和精简jre步骤.zip

    制作桌面软件exe执行文件和精简jre步骤

    自己动手精简你的jre到做小

    自己动手精简我们jre,再打包成exe这样java程序就可以在windows下很好的运行了,而且jre体积也很小不影响下载!感兴趣的可以下载后动手精简一下你的jre,我的精简到了2M以内,做成exe后根本看不出来是java做的。里面...

    java程序生成本地EXE等可运行程序

    java程序生成本地EXE等可运行程序.docx java程序打JAR包,使用Excelsior JET 7.6生成本地EXE程序,或封装安装包(可在没有JRE环境的PC上面运行)

    java程序打包成.exe可安装文件(包含全部工具,和精简jre工具,附说明文件)

    java程序打包成.exe可安装文件 包含全部工具,和精简jre工具,附说明文件 包含说明文件

    Java Runtime Environment JRE 1.4.2

    JRE 1.4.2 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。

    Java8(JRE) Update 77 官方版.zip

    Java8(JRE) Update是一款网络应用程序语言,是运行java程序不可缺少的环境,也是款革命性开发平台,很多通过java编写的软件都需要依赖jre才能正常运行。Java8平台集合生产力、易用性、多语种编程、更高安全性和稳定...

    java客户端以及jre瘦身

    java客户端工具以及jre瘦身 java2exe jre瘦身

    java 打包成安装包无需依赖JRE轻松搞定

    我们开发java程序运行的时候都需要依赖jre才能运行起来,但是用户的电脑上并没有安装jdk或jre的java运行环境。不可能让客户去安装了应用程序还要需安装java开发环境吧。下面是我将jar包打包成setup安装文件一些的...

    精简的jre和精简过程

    最近在写一个小程序,jre1.8.0_181整整有199mb,对于一个只有400多k的程序来说,完全没必要,于是就进行精简,把jre精简到40M、左右,程序也能正常运行。如果你急需使用精简的jre,可以下载试试。

    精简版jre1.8(wins 64位,附压缩教程)

    最近在写一个java开发的游戏,jre1.8.0_181整整有199mb,对于一个只有400多k的游戏来说,完全没必要,于是就进行精简,把jre精简到22.5mb,游戏也能正常运行。如果你急需使用精简的jre,可以下载试试。本来想精简到...

    JRE瘦身 jre减肥 精简jre jre精简

    因为很多用户的电脑上没有合适版本的jre。用一个软件的同时必须安装另外一个软件(jre)会给人一种...无论你修改过的jre多么不符合java规范,只要你不把它叫成是java,那就不会有人管你~ -----------引用Nighthaven

Global site tag (gtag.js) - Google Analytics