专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » javajre:让Java程序带着JRE一起上路 »正文

javajre:让Java程序带着JRE一起上路

来源: 发布时间:星期一, 2009年3月16日 浏览:0次 评论:0
用Java开发发布时总要考虑问题就是如何在使用者机器上装好JRE要考虑问题很多:使用者有没有能力独自安装JRE使用者已有JRE和我们需要版本是不是会不会出现版本问题等等   使用.NET要考虑问题就少些现在.NET CLR似乎已经很普及了看好多D版Win XP都会自己安装最新.NET CLR而且似乎它安装界面也比JRE友好些彻底解决安装JRE问题方案就是让我们应用自己背着JRE!这样我们就像传统Win32应用双击就可以执行不用管所在机器上是否有JRE是什么版本JRE无论怎样我有我自己!要做到这其实非常容易   王森在他Java深度历险(强力推荐这本书内容少而精)章就解释了JDKJREJVM的间关系解释了我们执行java.exe时发生事情其中提到java.exe依照套逻辑来寻找可以用JRE首先查找自己所在目录下有没有JRE(据王森讲这样说不确切我没有JDK全部源代码在此无从考证);其次查找自己父目录下有没有JRE;最后才是查询Windows注册表   通常我们在安装好了JRE机器上任何个目录下都可以执行java.exe它在安装时被复制到了windowssystem32目录下而后者无论如何都会在path环境变量中这个java.exe最终必然会访问注册表来确定真正JRE所在地若我们要求每个应用都自带JRE必然不能走这条路逻辑第 2条讲java.exe会在它父目录下查找JRE解决方案就在这条中假设我们应用打好了包叫做MyApp.jar放在MyApp目录下我们在MyApp目录下可以执行java –jar MyApp.jar来运行我们我们安装是JRE 1.5在C:\Program Files\Java\jre1.5.0下现在我们只需要简单将jre1.5.0目录搬到MyApp目录下顺便改个容易写名字比如叫jre现在我们应用就象这样:   MyApp   MyApp.jar   Jre   Jre1.5.0目录下全部内容   Java.exe就在jre目录下bin目录中根据第 2条逻辑java.exe会在它父目录中查找jre实验证实它会查找lib目录而lib就在jre目录下因此这样java.exe就会确定jre所在然后正常执行java不会去管我们是否安装了JRE注册表中是否有注册项这些杂事了   试在命令行下进入MyApp目录下假设它在C盘将path指向MyApp下JRE:   path=c:\MyApp\jre\bin   然后运行:  java –verbose –jar MyApp.jar   加上verbose参数以确定我们确实用了这套被搬出了家JRE可以运行并且在命令行输出前几行可以看到:   [Opened C:\MyApp\jre\lib\rt.jar]   [Opened C:\MyApp\jre\lib\jsse.jar]   [Opened C:\MyApp\jre\lib\jce.jar]   [Opened C:\MyApp\jre\lib\chars.jar]   因此读取确实是它私有JRE至此我们似乎完成了任务但是现在我们私有JRE仍不完美缺点是太大JRE 1.5有接近70MB作为我们私有JRE好多内容都是可以抛弃Jre目录下license都可以不要bin下执行文件只需要保留java.exe或者javaw.exelib下只要保留rtjssejcechars几个库就可以了除了i386和zi两个子目录外其余子目录都可以不要Zi下只需要保留自己地区子目录和其下些文件就可以Lib下除了库的外属性文件等等都要保留这样清理JRE仍然有接近50MB还可以继续清理几个库文件里面不需要内容这需要仔细整理会很费功夫最好能写出个自动工具帮助我们整理它们从Sun公司上下到JMF里面附带用Java写媒体播放器就自带了JRE只有几个MB   清理过后需要运行几遍我们应用以确保我们JRE不缺少东西   如果我们希望能有直接启动我们应用那就还要费些功夫最简单思路方法是弄出个快捷方式来但是快捷方式路径不能是相对不方便我们安装我想到方案就是用Win32包装在VS.NET下写个Win32小:(点击查看附件)   基本上是按照MSDN文档中例子照搬将它编译成个EXE文件我们任务才全部完成双击这个EXE文件我们启动了看起来和传统Win32没有两样JRE完全被隐藏在底层   P.S. 使用了这个方案后我用Wise Installation 制作安装发现个非常奇怪问题安装结束后安装似乎非要运行个叫做GLJ什么什么后缀是TMP还需要JVM结果就报错JVM.DLL找不到安装总是不成功我已经禁掉了OCX / DLL / EXE自注册和卸载支持为什么还不对?有谁知道是为什么吗?

TAG: Java JAVA java JRE
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: