我有3罐杰克逊库
- 杰克逊核2.8.10.jar
- Jackson-Annotations-2.8.0.jar
- Jackson-Databind-2.8.10.jar
我成功地为核心和注释创建了Module-info.java,并使用JDEPS将其转换为命名Maodule。
对于databind,我尝试了以下命令:
jdeps-生成模块info。-Module-Path%Java_home% Jomds; Jackson.core; Jackson.Annotations uspermods Jackson-Databind-2.8.10.jar
现在正在发生以下错误:
Missing dependence: .jackson.databindmodule-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.
如何为杰克逊 - 戴塔宾德生成模块info.java?
简短的答案是,是的,您必须将库转换为显式模块。
jlink
工具旨在提供仅具有所需模块的修剪二进制图像。问题是自动模块可以访问ClassPath(又称未命名模块),该模块可以读取所有JDK模块。所以什么都不会修剪。
此线程也陈述了这一点,并带有指向YouTube视频的链接。
此示例将commons-lang3-3.5.jar
转换为jlink
演示的解释模块。
edit :要更具体,这是一个示例脚本,以jackson-core
,jackson-annotations
和jackson-databind
传统罐子转换为模块化罐。
这个想法是:
- 在传统jar上运行
jdeps --generate-module-info
- 将旧罐解压缩到文件夹中,从上方添加
module-info.java
,重新编译和重新拉链
诀窍是,具有依赖项的模块化罐将需要这些依赖项作为命令行参数。例如,这是jackson-databind
(在某种程度上摘要):
# 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
被接受的答案描述了为不提供它的库创建Java 9模块信息(它们被视为自动模块)。
杰克逊(Jackson)从版本2.10.0开始,实际上提供Java 9模块信息。