为了分发一个springboot项目,在不考虑目标机器是否有jre的情况下,携带一个jre环境是一个选择。本文就尝试从原生的jdk 9.0.1 精简一个jre供分发。
实际情况可能略有不同,比如目标机器不同,jre是否兼容,未测试。
使用基本的eureka-server项目测试可运行。其他项目可能根据依赖的基础模块进行相应调整。
基本导出命令
以下是最基本的命令。
$J/bin/j -p $J/jmods --add-modules java. --output jre
当然,只有java. 是不行的。可以测试运行,会看到很多ClassNotFound,可以找一下这些类在哪个模块里,增加对应的模块。
查找某个类在哪个mod中
当遇到测试执行时提示找不到某个类时,如:java.beans.PropertyEditor,可执行如下命令进行查找。
ls $J/jmods/java.*.jmod |xargs -ti jmod list {} |grep java.beans.PropertyEditor
...
jmod list /opt/jdk-9.0.1/jmods/java.desktop.jmod
classes/java/beans/PropertyEditorManager.class
classes/java/beans/PropertyEditorSupport.class
classes/java/beans/PropertyEditor.class
jmod list /opt/jdk-9.0.1/jmods/java.instrument.jmod
...就可以知道,该类在java.desktop.jmod 中。那么相应调整命令行:
$J/bin/j -p $J/jmods --add-modules java. ,java.desktop --output jre
以此类推。
最终结果
$J/bin/j -p $J/jmods --add-modules java. ,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument,java.rmi,java. .bind --output jre
默认的jre的大小:
$ du -sh $J 557M /opt/jdk-9.0.1 $ du -sh /opt/jdk1.8.0_151/jre 205M /opt/jdk1.8.0_151/jre
精简的jre的大小:
$ du -sh jre 95M jre
测试启动
./jre/bin/java -jar eureka-server-0.0.1-SNAPSHOT.jar
继续阅读与本文标签相同的文章
下一篇 :
java8的日期API总结(JSR310)
-
ElasticSearch(7.2.2)-常⻅中⽂分词器的使⽤
2026-05-16栏目: 教程
-
mongodb取得数组元素中的匹配项目。
2026-05-16栏目: 教程
-
vim的寄存器动作真是太酷了
2026-05-16栏目: 教程
-
异步禁止! map函数结合Promise同步写法
2026-05-16栏目: 教程
-
Docker搭建
2026-05-16栏目: 教程
