java9导出运行springboot的精简版jre

简介: 为了分发一个springboot项目,再不考虑目标机器是否有jre的情况下,携带一个jre环境是一个选择。本文就尝试从原生的jdk 9.0.1 精简一个jre供分发。 实际情况可能略有不同,比如目标机器不同,jre是否兼容,未测试。

为了分发一个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
目录
相关文章
|
25天前
|
Java 应用服务中间件 Spring
为什么SpringBoot的 jar 可以直接运行?
SpringBoot的 jar 可以直接运行的原因
112 2
|
2天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
18 2
|
26天前
|
Java 容器
【Azure Function App】Java Function在运行中遇见内存不足的错误
【Azure Function App】Java Function在运行中遇见内存不足的错误
|
20天前
|
Java Apache Maven
Java中使用poi+poi-tl实现根据模板导出word文档
这个过程不仅简化了文档生成的工作,而且保证了生成文档的一致性与准确性,特别适合于那些需要生成大量文档的自动化场景。通过以上步骤,Java开发人员可以实现高效、可靠的Word文档导出功能。
70 0
|
20天前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
68 0
|
27天前
|
Java Maven C++
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
【Azure Developer】记录一次使用Java Azure Key Vault Secret示例代码生成的Jar包,单独运行出现 no main manifest attribute, in target/demo-1.0-SNAPSHOT.jar 错误消息
|
27天前
|
Java Spring
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)
|
27天前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
3天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的音乐推荐管理系统
基于Java+Springboot+Vue开发的音乐推荐管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的音乐推荐管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
36 8
基于Java+Springboot+Vue开发的音乐推荐管理系统
|
3天前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的母婴商城管理系统
基于Java+Springboot+Vue开发的母婴商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的网上母婴商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 7
基于Java+Springboot+Vue开发的母婴商城管理系统