`
上帝的指纹
  • 浏览: 48597 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

精简jre(上)

    博客分类:
  • Java
阅读更多

java是跨平台的东西,但有的时候我们不需要它去跨平台,我们希望能想c++做的程序一样,编码和简单处理后能够在系统运行。
这次的项目是要放到classmate pc 上,这款机器是为学生订做的,系统资源很有限,一个jre1.5就70多M,放在上面肯定是不行的。于是我找了一些相关的资料,提供链接如下:
如何制作最小的RCP程序压缩包(包含JRE)
java程序发布之jre篇
基本知道思路了,我把写的程序打包成jar,能双击运行了,然后拷贝一个jre到程序目录下,具体是这样的,目录叫dict,dict下面有dict.jar、jre(目录),然后写了一个cmd脚本:
@echo off
set path=%cd%\jre\bin
java -jar -verbose:class dict.jar >>class.txt
pause

这样程序使用的就是当前目录下的jre,程序运行后,最好把所有的功能使用一遍,这样输出了一个文件class.txt,里面有所有需要的class,其格式如下:
[Opened D:\data\dict\jre\lib\rt.jar]
[Loaded java.lang.Object from D:\data\dict\jre\lib\rt.jar]
[Loaded java.io.Serializable from D:\data\dict\jre\lib\rt.jar]
[Loaded java.lang.Comparable from D:\data\dict\jre\lib\rt.jar]
[Loaded java.lang.CharSequence from D:\data\dict\jre\lib\rt.jar]
[Loaded org.apache.lucene.index.CompoundFileReader$FileEntry from file:/D:/data/dict/dict.jar]


我们依照这个文件来裁剪rt.jar:
首先在utralEdit中进行一些处理,去掉所有不是rt.jar中的class的行,去掉from后面的,去掉loaded等无关项目,再把“.”替换成“/”.这个可以利用正则表达式等轻松处理。处理完后得到的文件类似如下格式:
java/lang/Object
java/io/Serializable
java/lang/Comparable
java/lang/CharSequence
java/lang/String

然后写一个脚本或者程序处理,将rt中需要的的class拷贝到另一个对应的文件夹rt1,我用java写了一个,没有时间仔细改,但能完任务了。代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//我裁剪出来的rt大小为500多k。然后将rt1里面的目录和文件打包成rt.zip,改名为rt.jar,然后替换原来的rt.jar。具体的步骤可以参考上面提到的那两篇文章。

public class ReduceRt {
	// 文件拷贝
	public static boolean copy(String file1, String file2,String file3) {
		try // must try and catch,otherwide will compile error
		{
			// instance the File as file_in and file_out
			java.io.File file_in = new java.io.File(file1);
			java.io.File file_out = new java.io.File(file2);
			if(!file_out.exists()){
				file_out.mkdirs();
			}
			FileInputStream in1 = new FileInputStream(file_in);
			FileOutputStream out1 = new FileOutputStream(file3);
			byte[] bytes = new byte[1024];
			int c;
			while ((c = in1.read(bytes)) != -1)
				out1.write(bytes, 0, c);
			in1.close();
			out1.close();
			return (true); // if success then return true
		}

		catch (Exception e) {
			System.out.println("Error!");
			return (false); // if fail then return false
		}
	}

	// 读取路径,copy
	public static int dealClass(String needfile) throws IOException {
		int sn = 0; // 成功个数
		String Loaded = "Loaded";

		File usedclass = new File(needfile);
		if (usedclass.canRead()) {
			String line = null;
			LineNumberReader reader = new LineNumberReader(new InputStreamReader(new FileInputStream(usedclass), "GBK"));
			while ((line = reader.readLine()) != null) {
				line = line.trim();
				if (line.lastIndexOf("rt.jar") != -1) {
					int start = line.indexOf(Loaded);
					if (start != -1) {
						int end = line.lastIndexOf("from");
						if(end != -1){
							String str = line.substring(start+Loaded.length()+1, end-1);
							Pattern p = Pattern.compile("\\.");
							Matcher m = p.matcher(str);
							String after = m.replaceAll("/");
							String file1 = after+".class";
							int hg = file1.lastIndexOf("/");
							
							if(hg != -1){
								String file2 = "rt1/"+file1.substring(0, hg);
								copy("rt/"+file1,file2,"rt1/"+file1);
							}
						}
						
					}
				}

			}
		}
		return sn;

	}

	public static void main(String[] args) {
		String needfile = "class.txt";
		try {
			int sn = dealClass(needfile);
			System.out.print(sn);
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}

	}

}
 
分享到:
评论

相关推荐

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

    精简jre步骤 1. 拷贝一个完整版的jre文件夹到D盘 2. 删除jre目录下所有出bin和lib目录的所有文件或目录 3. 打开cmd窗口,设置path路径为空,转到D:\jre\bin目录,运行java –version。正常显示当前Java的版本。 4. ...

    精简JRE - 实例Swing计算器 with 精简JRE

    综上所述,这个压缩包提供了一个使用Swing构建的计算器应用实例,同时采用了精简JRE来减少依赖和提高部署效率。这对于Java初学者和需要创建桌面应用的开发者来说,是一个很好的学习和参考案例。

    精简的jre和精简过程

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

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

    - 低配置设备:在内存和硬盘空间有限的设备上,精简版JRE提供了运行Java程序的可能性。 5. **文件结构**: "jre"这个文件夹可能包含以下关键组件: - `bin`:存放可执行文件,如`java.exe`用于运行Java程序,`...

    精简JRE(windows32位和64位,linux 32位和64位)

    精简JRE的主要目的是减少安装包的大小,提高下载和部署的效率,同时降低运行时的内存占用。在JRE中,rt.jar是最核心的库文件,包含了Java标准类库的所有类。通过对rt.jar进行精简,可以移除那些不常用或者特定应用...

    exe4j+精简jre实例

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

    精简 jre 效果程序

    - **定制需求**:某些应用可能只需要特定的Java功能,精简JRE可以只包含这些必要的部分。 - **安全性**:减少不必要的组件可以降低潜在的安全风险。 3. **精简方法**: - **选择性安装**:通过定制安装,仅安装...

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

    因为很多用户的电脑上没有合适版本的jre。用一个软件的同时必须安装另外一个软件(jre)会给人一种流氓软件强行捆绑的感觉,而很多用户对此很抵触。更不要提用户电脑上的jre版本千变万化(有没有jre,是微软的还是...

    超级精简版的jre

    - **测试验证**:在生产环境中部署之前,务必进行全面的测试,确保应用在精简版JRE上运行无误。 文件名称列表中只有一个"jre",这可能表示压缩包里包含了一个完整的JRE,但是否经过精简则需要实际解压检查。通常,...

    精简JRE第二步 ─ 精简lib目录

    然而,标准的JRE安装包相对较大,对于某些只需要特定功能的应用场景,如服务器部署、嵌入式系统或者物联网设备,精简JRE可以有效地减小资源占用,提高运行效率。本篇文章将深入探讨如何精简JRE中的"lib"目录,以满足...

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

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

    精简jre最新版

    "精简jre最新版"指的是针对Java运行环境的一个轻量级版本,这个版本进行了优化,删除了一些不必要的组件,以减小安装包的大小。在描述中提到,它支持Swing组件,这意味着用户依然可以使用Java的图形用户界面(GUI)...

    精简版本jre

    2. **快速启动**:由于包含的组件减少,启动和运行Java程序的速度相对较快,特别是在内存有限或者对系统性能要求较高的设备上,精简版JRE能提供更好的体验。 3. **低资源占用**:精简版JRE减少了内存和CPU的使用,...

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

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

    精简Jre和Jsmooth

    1. 支持最新的Java版本:JSmooth能够与多个Java版本兼容,确保转换后的exe文件能够在不同版本的JRE上运行。 2. 自动检测并下载JRE:JSmooth可以自动检测用户系统中是否已安装合适的JRE,若未安装,它会提供一个链接...

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

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

    Jre8精简基础镜像包

    制作 docker 精简 jre8 基础镜像,基础镜像为bitnami/minideb,jdk8u321版本,已解决httpclient中文乱码和webservice-client缺包问题。

    jre1.8 64位精简精版.zip

    在部署SWT/JFace应用时,使用这样的精简JRE有几个优点: 1. **更快的下载速度**:对于用户而言,下载小体积的JRE意味着更快的安装过程。 2. **节省磁盘空间**:对于系统资源有限的设备,精简版JRE可以有效减少存储...

    精简的jre的精简工具

    GreenJVMMake - CSDN下载 下载 这是一个配合GreenJVM使用的JRE精简工具,可以动态的获取应用程序中对于rt.jar的class依赖,并根据依赖关系自动构成精简后的rt.jar.

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

    精简JRE通常涉及以下步骤: 1. **选择精简工具**: - 工具如`jlink`是Java 9及更高版本自带的命令行工具,用于创建定制的运行时图像。它允许用户选择需要的模块并生成自定义的JRE。 - `jpackage`是Java 14引入的...

Global site tag (gtag.js) - Google Analytics