前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java9导出运行springboot的精简版jre

java9导出运行springboot的精简版jre

作者头像
pollyduan
发布2019-11-04 14:58:29
1.3K0
发布2019-11-04 14:58:29
举报

为了分发一个springboot项目,在不考虑目标机器是否有jre的情况下,携带一个jre环境是一个选择。本文就尝试从原生的jdk 9.0.1 精简一个jre供分发。

实际情况可能略有不同,比如目标机器不同,jre是否兼容,未测试。

使用基本的eureka-server项目测试可运行。其他项目可能根据依赖的基础模块进行相应调整。

基本导出命令

以下是最基本的命令。

代码语言:javascript
复制
$J/bin/jlink -p $J/jmods --add-modules java.base --output jre

当然,只有java.base 是不行的。可以测试运行,会看到很多ClassNotFound,可以找一下这些类在哪个模块里,增加对应的模块。

查找某个类在哪个mod中

当遇到测试执行时提示找不到某个类时,如:java.beans.PropertyEditor,可执行如下命令进行查找。

代码语言:javascript
复制
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 中。那么相应调整命令行:

代码语言:javascript
复制
$J/bin/jlink -p $J/jmods --add-modules java.base,java.desktop --output jre

以此类推。

最终结果

代码语言:javascript
复制
$J/bin/jlink -p $J/jmods --add-modules java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument,java.rmi,java.xml.bind --output jre

默认的jre的大小:

代码语言:javascript
复制
$ 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的大小:

代码语言:javascript
复制
$ du -sh jre
95M	jre

测试启动

代码语言:javascript
复制
./jre/bin/java -jar eureka-server-0.0.1-SNAPSHOT.jar
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本导出命令
  • 查找某个类在哪个mod中
  • 最终结果
  • 测试启动
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档