GoForce5500
GoForce5500

Reputation: 131

How to use jdeps to analysis dependency of a fat jar(spring-boot)?

The fat jar works well and I just want to use a cropped JRE.
I tried with following:

jdeps --list-deps {my fat jar}

The result I got is:

java.base
java.logging

If I use that to make my own JRE using jlink --no-header-files --no-man-pages --compress=2 --strip-debug --add-modules java.base,java.logging --output cropped-jre, the new JRE just can't satisify the fat jar.
Actually, it needs other dependencies as well as "java.sql" for example.
The tree view of the fat jar is:

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}
......

How can I got all those dependency with jdeps?

When you try to avoid this, you may try to unzip your fat jar and point it's lib to jdeps, but then you'll encounter another bug --https://bugs.openjdk.java.net/browse/JDK-8207162, which prevents you from using multi-version jars(such as log4j) with jdeps. Finally I tried every dependency to find an answer: 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 That will generate a cropped JRE(only 40MB, based on openJDK11) which could run your spring-boot application(with Tomcat/Thymeleaf/Jedis).

Upvotes: 2

Views: 4178

Answers (1)

Konstantin Labun
Konstantin Labun

Reputation: 3908

I guess jdeps just can't handle jars recursively. Try to unpack your fat jar and run jdeps --list-deps on each of jars in <fat jar root>/lib dir.

Upvotes: 1

Related Questions