胖罐子效果很好,我只想使用裁剪后的 JRE。
我尝试了以下操作:
jdeps --list-deps {my fat jar}
我得到的结果是:
java.base
java.logging
如果我用它来制作我自己的 JRE using jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.logging --output cropped-jre
,那么新的 JRE 就无法满足这个胖罐子。
实际上,它需要其他依赖项以及例如“java.sql”。
fat jar的树状图是:
jar tf {my fat jar}
META-INF/
META-INF/MANIFEST.MF
org/
org/springframework/
org/springframework/boot/
......
BOOT-INF/
BOOT-INF/classes/
BOOT-INF/classes/templates/
BOOT-INF/lib/{spring/netty/etc.jar}
......
如何使用 jdeps 获得所有这些依赖项?
当你试图避免这种情况时,你可能会尝试解压缩你的 fat jar 并将它的 lib 指向 jdeps,但是你会遇到另一个错误 - https://bugs.openjdk.java.net/browse/JDK-8207162,这会阻止您在 jdeps 中使用多版本 jar(例如 log4j)。最后,我尝试了每个依赖项以找到答案: jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.logging,java。 management,java.sql,java.transaction.xa,java.xml,java.naming,java.desktop,java.security.jgss,java.instrument,jdk.unsupported --output java-base 这将生成一个裁剪的 JRE(只有 40MB,基于 openJDK11)可以运行你的 spring-boot 应用程序(使用 Tomcat/Thymeleaf/Jedis)。