java9导出运行springboot的精简版jre


声明:本文转载自https://my.oschina.net/polly/blog/1595574,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

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

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

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

基本导出命令

以下是最基本的命令。

$J/bin/jlink -p $J/jmods --add-modules java.base --output jre 

当然,只有java.base 是不行的。可以测试运行,会看到很多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/jlink -p $J/jmods --add-modules java.base,java.desktop --output jre 

以此类推。

最终结果

$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的大小:

$ 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 

本文发表于2017年12月27日 16:32
(c)注:本文转载自https://my.oschina.net/polly/blog/1595574,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2310 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

万稳万当,不如一默。任何一句话,你不说出来便是那句话的主人,你说了出来,便是那句话的奴隶。

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1