Как использовать 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. management, 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).


person GoForce5500    schedule 30.12.2018    source источник
comment
В каком случае нам понадобится обрезанная jre?   -  person ZhaoGang    schedule 30.12.2018
comment
@ZhaoGang Может быть в образе докера или на raspberrry pi? Быстрее и менее громоздко.   -  person GoForce5500    schedule 31.12.2018
comment
@ZhaoGang, потому что нет общедоступной устанавливаемой JRE ›java 8, доступной для загрузки. Итак, если вы разрабатываете приложение с использованием java ›8, вы обязаны создать обрезанную JRE.   -  person    schedule 04.07.2019


Ответы (1)


Я полагаю, jdeps просто не может рекурсивно обрабатывать банки. Попробуйте распаковать свою толстую банку и запустить jdeps --list-deps на каждой из банок в <fat jar root>/lib каталоге.

person Konstantin Labun    schedule 30.12.2018
comment
Вы правы, но когда я пытаюсь это сделать, я сталкиваюсь с другой проблемой - bugs.openjdk. java.net/browse/JDK-8207162, что не позволяет мне использовать многоверсионные jar-файлы (например, log4j) с jdeps. - person GoForce5500; 31.12.2018