1

胖罐子效果很好,我只想使用裁剪后的 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)。

4

1 回答 1

1

我想jdeps只是不能递归地处理罐子。尝试打开你的胖罐子并在目录jdeps --list-deps中的每个罐子上运行。<fat jar root>/lib

于 2018-12-30T09:44:04.917 回答