如何使用jdeps分析胖子罐的依赖关系(spring-boot)?

时间:2018-12-30 07:04:36

标签: java spring-boot jdeps

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

1 个答案:

答案 0 :(得分:0)

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