【问题标题】:How to use jdeps to analysis dependency of a fat jar(spring-boot)?如何使用 jdeps 分析 fat jar(spring-boot)的依赖关系?
【发布时间】:2018-12-30 07:04:36
【问题描述】:

胖罐子很好用,我只想使用裁剪后的 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 就无法满足胖 jar 的需求。
实际上,它需要其他依赖项以及“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 获得所有这些依赖项?

当你试图避免这种情况时,你可能会尝试解压你的 fat jar 并将它的 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(仅 40MB,基于 openJDK11),它可以运行您的 spring-boot 应用程序(使用 Tomcat/Thymeleaf/Jedis)。

【问题讨论】:

  • 在什么情况下我们需要裁剪的 jre?
  • @ZhaoGang 也许在 docker 镜像或树莓派上?更快,更省事。
  • @ZhaoGang 因为没有公共可安装的 JRE > java 8 可供下载。因此,如果您使用 java > 8 开发应用程序,则有义务创建裁剪后的 JRE

标签: java spring-boot jdeps


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 2016-02-09
  • 2021-02-27
  • 2021-08-01
  • 1970-01-01
  • 2019-09-11
  • 2020-07-20
  • 2019-11-21
相关资源
最近更新 更多