-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
21, 22, 23
-
generic
-
generic
ADDITIONAL SYSTEM INFORMATION :
OS: Debian testing (Trixie)
$ java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Debian-3)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Debian-3, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
jdeps has the convenience option `--print-module-deps` in order to determine which modules to add to a jlink image to run an application. Concretely one gathers all jars/dependencies of an application in a folder and executes `jdeps --print-module-deps jars/*.jar`. `*.jar` must be seen as the expansion of all `.jar` files present in the `jars` directory. The reason to put all jars as an argument instead of a "root jar" is to also let jdeps analyze runtime dependencies too, like services, which will not be reached via the root jar.
When a jar in `*.jar` is a modularized jar and depends on automatic modules (jars also present in *.jar), `jdeps --print-module-deps` will fail. It is possible to make the command succeed by putting the non-modularized jars on the module path, but then it becomes less convenient to figure out which modules to add to the jlink image, because jdeps will not perform it's analysis on jars on the module path, only on jars provided as argument. Hence one has to perform several manually crafted jdeps commands to get to the desired result.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
#!/bin/bash
#
# There doesn't seem to be a possibility to upload an example project.
# I've encoded an example project in base64 instead. Just copy/paste
# this script into a file and execute it to reproduce the issue. It
# will run jdeps on two jars lib.jar and main.jar. main.jar is a
# modularized jar requiring the automatic module "lib", which is
# contained in lib.jar.
# The archive data contains the jars as well as the source code.
ARCHIVE_DATA='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
QEBAQEBAQHAr/gfA29Q2AFAAAA=='
echo -n "$ARCHIVE_DATA" | base64 -d >jdeps_bug.tar.gz
tar xzf jdeps_bug.tar.gz
cd jdeps_bug/out
jdeps --print-module-deps main.jar lib.jar
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
java.base
ACTUAL -
Exception in thread "main" java.lang.module.FindException: Module lib not found, required by main
at java.base/java.lang.module.Resolver.findFail(Resolver.java:892)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:420)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:254)
at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:607)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:561)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:537)
at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:50)
---------- BEGIN SOURCE ----------
Cf. "Steps to Reproduce"
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
jdeps --module-path lib.jar --print-module-deps main.jar
+
jdeps --print-module-deps lib.jar
I understand both will print java.base, but if lib.jar would depend on another java module, e.g. java.xml, java.xml would not be printed in the first jdeps invocation.
FREQUENCY : always
OS: Debian testing (Trixie)
$ java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Debian-3)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Debian-3, mixed mode, sharing)
A DESCRIPTION OF THE PROBLEM :
jdeps has the convenience option `--print-module-deps` in order to determine which modules to add to a jlink image to run an application. Concretely one gathers all jars/dependencies of an application in a folder and executes `jdeps --print-module-deps jars/*.jar`. `*.jar` must be seen as the expansion of all `.jar` files present in the `jars` directory. The reason to put all jars as an argument instead of a "root jar" is to also let jdeps analyze runtime dependencies too, like services, which will not be reached via the root jar.
When a jar in `*.jar` is a modularized jar and depends on automatic modules (jars also present in *.jar), `jdeps --print-module-deps` will fail. It is possible to make the command succeed by putting the non-modularized jars on the module path, but then it becomes less convenient to figure out which modules to add to the jlink image, because jdeps will not perform it's analysis on jars on the module path, only on jars provided as argument. Hence one has to perform several manually crafted jdeps commands to get to the desired result.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
#!/bin/bash
#
# There doesn't seem to be a possibility to upload an example project.
# I've encoded an example project in base64 instead. Just copy/paste
# this script into a file and execute it to reproduce the issue. It
# will run jdeps on two jars lib.jar and main.jar. main.jar is a
# modularized jar requiring the automatic module "lib", which is
# contained in lib.jar.
# The archive data contains the jars as well as the source code.
ARCHIVE_DATA='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
QEBAQEBAQHAr/gfA29Q2AFAAAA=='
echo -n "$ARCHIVE_DATA" | base64 -d >jdeps_bug.tar.gz
tar xzf jdeps_bug.tar.gz
cd jdeps_bug/out
jdeps --print-module-deps main.jar lib.jar
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
java.base
ACTUAL -
Exception in thread "main" java.lang.module.FindException: Module lib not found, required by main
at java.base/java.lang.module.Resolver.findFail(Resolver.java:892)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:420)
at java.base/java.lang.module.Configuration.resolve(Configuration.java:254)
at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:607)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:561)
at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:537)
at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:50)
---------- BEGIN SOURCE ----------
Cf. "Steps to Reproduce"
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
jdeps --module-path lib.jar --print-module-deps main.jar
+
jdeps --print-module-deps lib.jar
I understand both will print java.base, but if lib.jar would depend on another java module, e.g. java.xml, java.xml would not be printed in the first jdeps invocation.
FREQUENCY : always
- relates to
-
JDK-8325262 jdeps can drop printing stack trace when FindException is thrown due to modules not found
- Resolved