最近有个需求,需要为客户的工业软件开发一套基于BS架构的数据可视化软件,技术选型当然是选Java,毕竟最熟悉Java,框架自然也就是Spring Boot。
客户的软件会实时的将数据写入到本地目录下的一个csv文件里,然后我们的程序需要实时读取这个目录下最新的csv文件并保存到数据库,同时提供接口给前端展示。由于客户的软件只能在windows下跑,所以java项目自然也是要在windows下跑的。
然后就是要选择jdk,由于是新项目,没什么历史包袱,所以我就选了jdk11,由于Oracle JDK商用授权协议变更,所以为了保险起见,最终发给客户的jdk最好还是不用Oracle JDK,改用OpenJDK,oracle 提供了可以商用的openjdk构建,下载地址在这: jdk.java.net/java-se-ri/11。
开发完之后自然就是把jar|war包,连同jdk等一系列文件一起打个包压缩一下准备发给客户,然后会发现,jdk太大了,解压后足足有280mb,就算压缩之后也有170多mb
很显然,jdk文件夹里面肯定有很多东西是我们程序运行时用不到的,比如那个src.zip,以前oracle的 jdk 8是会单独提供一个server jre,仅有50mb左右
不过jdk 8 之后就不在提供了,然后查了下资料,发现jdk9之后提供了一个叫jlink的工具可以用来自定义jre
具体步骤:
- 找出springboot项目依赖的jar包所依赖的jdk模块:
将lib目录中的jar包全部解压缩出来,使用jdeps命令获取依赖清单
1 | jdeps --list-deps *.jar |
这2个jar包需要增加额外的参数
1 | jdeps --list-deps --multi-release 9 HikariCP-3.4.5.jar log4j-api-2.13.2.jar |
- 将这些模块打包
1 | jlink --no-header-files --no-man-pages --add-modules java.base,java.logging,java.desktop,java.naming,java.management,java.management.rmi,java.security.jgss,java.instrument,java.prefs,java.xml,java.rmi,java.scripting,java.transaction.xa,java.sql,java.sql.rowset --output jre |
打包之后的jre大小直接缩小到70多mb
压缩之后仅有28mb左右
运行看看,并没有发现什么问题
参考资料: