胖子罐效果很好,我只想使用裁剪的JRE。
我尝试了以下方法:
jdeps --list-deps {my fat jar}
我得到的结果是:
java.base
java.logging
如果我使用jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.logging --output cropped-jre
来创建自己的JRE,则新的JRE不能满足胖子的需求。
实际上,它还需要其他依赖项,例如“ java.sql”。
胖子罐的树形图是:
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获得所有这些依赖关系?
当您尝试避免这种情况时,您可以尝试解压缩胖罐并将其lib指向jdeps,但是随后会遇到另一个错误-https://bugs.openjdk.java.net/browse/JDK-8207162,这会阻止您使用多版本的jar (例如log4j)和jdeps。最后,我尝试了每种依赖关系以找到答案: 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(基于openJDK11仅40MB),该JRE可以运行您的spring-boot应用程序(使用Tomcat / Thymeleaf / Jedis)。
答案 0 :(得分:0)
我想jdeps
不能递归地处理jar。尝试解开您的胖罐子,并在jdeps --list-deps
目录中的每个罐子上运行<fat jar root>/lib
。