我有3罐杰克逊库
我成功地为core和annotation创建了module-info.java,并使用jdeps将它们转换为Named maodule。
对于数据绑定,我尝试了以下命令:
jdeps --generate-module-info。 --module-path%JAVA_HOME%\ jomds; jackson.core; jackson.annotations existingmods \ jackson-databind-2.8.10.jar
现在出现以下错误:
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.
如何为jackson-databind生成module-info.java?
答案 0 :(得分:13)
简短的回答是,是的,您必须将库转换为显式模块。
jlink
工具旨在提供仅具有所需模块的修剪二进制图像。问题是自动模块可以访问可以读取所有JDK模块的类路径(也就是未命名的模块)。所以什么都不会被削减。
This thread也说明了这一点,并附有YouTube视频的链接。
This example将commons-lang3-3.5.jar
转换为jlink
演示的explict模块。
修改:更具体的here is an example脚本,按顺序将jackson-core
,jackson-annotations
和jackson-databind
旧版jar转换为模块化罐子。
这个想法是:
jdeps --generate-module-info
module-info.java
,重新编译并重新压缩诀窍是具有依赖关系的模块化jar将需要这些依赖项作为命令行参数。例如,这里是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
答案 1 :(得分:0)
可接受的答案描述了为不提供Java 9模块信息的库创建Java信息(它们被视为自动模块)。
Jackson从2.10.0版本开始,实际上提供了Java 9模块信息。