Как использовать jdeps для анализа зависимости жирной банки (spring-boot)?
Жирная банка хорошо работает, и я просто хочу использовать обрезанную JRE.
Я пытался со следующим:
jdeps --list-deps {my fat jar}
Результат, который я получил:
java.base
java.logging
Если я использую это, чтобы сделать свой собственный JRE с помощью jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.logging --output cropped-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. управление,java.sql,java.transaction.xa,java.xml,java.naming,java.desktop,java.security.jgss,java.instrument,jdk.unsupported --output java-base, который будет генерировать обрезанную JRE(только 40 МБ, основанный на openJDK11), который может запускать ваше приложение с весенней загрузкой (с Tomcat/Thymeleaf/Jedis).
1 ответ
Похоже jdeps
просто не могу обращаться с банками рекурсивно. Попробуй распаковать свою толстую банку и запустить jdeps --list-deps
на каждой из баночек в <fat jar root>/lib
реж.