`
王者之剑
  • 浏览: 196721 次
  • 性别: 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...

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

    在IT领域,特别是Java开发中,经常需要将应用程序...总结,将Java应用程序转化为exe并精简JRE,既方便了用户,也优化了软件性能。通过使用恰当的工具和方法,可以实现这一目标,同时需要注意各种技术细节和合规问题。

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

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

    精简Jre和Jsmooth

    "精简JRE"通常指的是为了减少安装体积、提高运行速度或者针对特定应用需求而定制的JRE版本。这种定制化的过程可能包括移除不必要或冗余的库、插件和服务,使得JRE更加轻量化,适用于那些对系统资源有限制或有特定...

    java程序转换成exe程序exe4j

    4. **设置JRE**:exe4j允许你选择JRE的安装路径,或者嵌入一个精简版的JRE到.exe文件中,使得用户无需额外安装JRE就能运行程序。 5. **定制启动参数**:你可以自定义.exe程序的启动参数,比如添加命令行选项,设置...

    java客户端以及jre瘦身

    1. **精简JRE**: 只包含必要的类库和组件,去除不使用的模块。例如,如果应用程序不需要Swing或JavaFX,那么这些组件就可以从JRE中移除。 2. **裁剪资源**: 删除不必要的本地库和语言包,只保留目标系统所需的语言...

    精简版JRE.rar

    通过使用精简版JRE,开发者可以降低生成的.exe文件的大小,这对于分发和下载来说非常有利,特别是对于那些网络条件不佳的用户。 另一方面,`Inno Setup`是一款流行的安装制作工具,它可以创建小巧且功能强大的...

    java生成exe-exe4j安装与使用图文讲解

    【Java生成EXE - 使用exe4j】 Java应用程序在Windows平台上部署时,常常面临一个问题:用户需要安装JRE,而且需要正确版本,这对许多不熟悉技术的用户来说是个挑战。为了解决这个问题,开发者通常会寻找方法将Java...

    jre精简工具(附详细教程).

    Java运行环境(JRE,Java Runtime Environment)是执行Java应用程序必不可少的组件,它包含了Java虚拟机(JVM)、Java核心类库以及其他支持Java程序运行的组件。然而,标准的JRE体积较大,对于某些特定场景,如...

    Java生成Exe工具-JavaExe

    这个工具的主要目的是解决Java程序在Windows系统上运行时需要依赖JRE(Java Runtime Environment)的问题,因为不是所有用户都安装了JRE。通过JavaExe,开发者可以创建独立的、自包含的.exe文件,用户只需双击即可...

    精简jre的利器autojar

    【标题】"精简jre的利器autojar"所涉及的知识点主要集中在Java应用程序的部署和优化上。Autojar是一款非常实用的工具,主要用于自动化Java应用程序的打包过程,特别是对于那些需要精简JRE(Java运行环境)的项目,它...

    java 生成exe文件,exe4j完整过程

    Java 生成EXE文件是为了将Java程序转换成Windows操作系统下的可执行文件,便于非Java环境下的用户运行。本文主要介绍了使用exe4j工具将Java程序转换为EXE的详细步骤。 1. **下载与安装exe4j** 首先,你需要从官方...

    jre6精简版

    exe4j是一个将Java应用程序转换为Windows可执行文件的工具,这样即使目标计算机上没有安装Java,也能运行Java程序。精简版JRE6在这种情况下可以作为嵌入的一部分,减少最终生成的exe文件大小,提高执行效率。 标签...

    JAVA程序打包完全功略(exe).doc

    **exe4j**是一款功能强大的Java应用程序打包工具,它能够将Java应用程序及其依赖的库文件打包成单一的可执行文件(.exe),使得Java程序可以在没有安装JRE(Java Runtime Environment)的系统上运行。这对于分发和...

    精简JRE - verbose命令

    `log.txt`文件很可能是通过运行带有verbose选项的Java程序生成的日志文件,包含了上述选项之一或多个的输出结果。 在实际应用中,我们需要根据具体情况选择合适的verbose选项,分析日志,找出性能瓶颈或故障原因。...

    精简的JRE7的资源

    Java运行环境(Java Runtime Environment,简称JRE)是运行Java应用程序所必需的系统组件,它包含了Java虚拟机(Java Virtual Machine, JVM)、类库以及其他支持Java程序运行的组件。JRE7是Java的一个重要版本,它在...

    精简JRE第一步 — 精简bin目录

    因此,"精简JRE第一步 — 精简bin目录"这一主题探讨了如何优化JRE,减少其体积,特别是针对`bin`目录的优化。 `bin`目录是JRE的核心部分,包含了Java虚拟机(JVM)和其他必要的可执行文件。这些文件用于启动Java...

    java程序或项目 打包 成 jar 与exe 文件

    在这里,我们将详细介绍如何将 Java 程序或项目打包成 jar 文件,然后将 jar 文件转换成exe 文件,并最终生成一个安装文件。 将 Java 程序或项目打包成 jar 文件 要将 Java 程序或项目打包成 jar 文件,我们需要...

    精简的jre,及精简工具

    精简了jdk1.6的jre 精简工具是GreenJVMMake.jar 下载后GreenJVMMake.jar不用解压,直接使用(将它与您的程序.jar放在同一个文件夹内) 使用方法javaw -jar GreenJVMMake.jar -t da -i ./myapp.jar -o ./ 就可生成rt....

Global site tag (gtag.js) - Google Analytics