I have 3 jar of jackson library
I created module-info.java for both core and annotation successfully and converted them to Named maodule using jdeps.
for databind , I tried following command:
jdeps --generate-module-info . --module-path %JAVA_HOME%\jomds;jackson.core;jackson.annotations existingmods\jackson-databind-2.8.10.jar
Now following error is occuring :
Missing dependence: .\jackson.databind\module-info.java not generated
Error: missing dependencies
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator$Mode not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat$Value not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties not found
com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value not found.
How can I generate module-info.java for jackson-databind ?
Module is a uniquely named reusable group of related packages, as well as resources and a module descriptor (module-info.java) All JDK Modules starts with "jdk. *". All Java SE Specifications Modules starts with "java.
Description. The jdeps command shows the package-level or class-level dependencies of Java class files. The input class can be a path name to a . class file, a directory, a JAR file, or it can be a fully qualified class name to analyze all class files. The options determine the output.
An Automatic Module is a JAR from the classpath that has been put in the module path. Their name is derived from the jar file name by default. Hence there are enormous numbers of pre-existing libraries that you can use in your applications.
The accepted answer describes to create Java 9 module info for libraries that do not provide it (they are treated as automatic modules).
Jackson, starting with version 2.10.0, actually provides Java 9 module info.
The short answer is that, yes, you'll have to convert the libraries to explicit modules.
The jlink
tool is intended to provide a trimmed binary image that has only the required modules. The issue is that automatic modules have access to the classpath (aka the unnamed module) which can read all JDK modules. So nothing would be trimmed.
This thread states this as well, with a link to a YouTube video.
This example converts commons-lang3-3.5.jar
to an explict module for a jlink
demo.
Edit: to be more specific, here is an example script that converts, in order, jackson-core
, jackson-annotations
, and jackson-databind
legacy jars to modular jars.
The idea is:
jdeps --generate-module-info
on the legacy jarmodule-info.java
from above, re-compile, and re-zipThe trick is that modular jars with dependencies will require those dependencies as command-line parameters. For example, here is jackson-databind
(abstracted somewhat):
# here, jackson-core and jackson-annotations have been built
# jackson-databind
jdeps --module-path $ROOT_DIR/modules \
--add-modules jackson.annotations,jackson.core \
--generate-module-info work $JACKSON_DATABIND_JAR
javac --module-path $ROOT_DIR/modules \
--add-modules jackson.annotations,jackson.core \
-d $ROOT_DIR/classes module-info.java
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With