使用Java 9中的JDEP创建用于自动模块的模块INFO



我有3罐杰克逊库

  1. 杰克逊核2.8.10.jar
  2. Jackson-Annotations-2.8.0.jar
  3. 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-corejackson-annotationsjackson-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模块信息。

相关内容

  • 没有找到相关文章

最新更新