在java 9中使用jdeps为自动模块创建模块信息

2024-01-07

我有 3 罐杰克逊图书馆

  1. 杰克逊核心-2.8.10.jar
  2. Jackson-annotations-2.8.0.jar
  3. 杰克逊-databind-2.8.10.jar

我成功地为核心和注释创建了 module-info.java ,并使用 jdeps 将它们转换为 Named maodule 。

对于 databind ,我尝试了以下命令:

jdeps --generate-module-info 。 --模块路径%JAVA_HOME%\jomds;jackson.core;jackson.annotations现有mods\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 ?


简而言之,是的,您必须将库转换为显式模块。

The jlink工具旨在提供仅包含所需模块的修剪后的二进制映像。问题是自动模块可以访问类路径(也称为未命名模块),它可以读取所有 JDK 模块。所以什么都不会被修剪。

这个线程 http://mail.openjdk.java.net/pipermail/jigsaw-dev/2016-July/008557.html也说明了这一点,并附有 YouTube 视频的链接。

这个例子 https://github.com/codetojoy/easter_eggs_for_java_9/tree/master/egg_21_JLink_With_Converted_Jar皈依者commons-lang3-3.5.jar到一个显式模块jlink demo.

Edit: 更具体,这是一个例子 https://github.com/codetojoy/easter_eggs_for_java_9/tree/master/egg_34_stack_overflow_47727869按顺序转换的脚本,jackson-core, jackson-annotations, and jackson-databind遗留罐子到模块化罐子。

这个想法是:

  • run jdeps --generate-module-info在遗留罐子上
  • 将遗留jar解压到一个文件夹中,添加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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在java 9中使用jdeps为自动模块创建模块信息 的相关文章

  • 如何正确配置 gradle build 以避免生成的 jar 中包含 log4j 和 slf4j?

    我的 spring boot 应用程序遇到问题 我可以在 Eclipse 中运行它 但无法运行 jar 文件 使用 gradle 构建 我运行以下命令来构建我的项目 gradle buid 构建成功 gradle build compile
  • 如何使用maven pom.xml创建jar

    我需要一个示例 pom 文件来为我的 spring 项目创建 jar 文件 创建jar文件时如何指定创建资源的目录和文件夹 我可以使用 pom jar 文件创建 jar 文件 但我需要将 applicationContext xml 包含在
  • eclipse项目未导入本地Maven仓库中的jar包

    我在设置 Eclipse 项目时遇到问题 问题是每当我创建一个新项目并导入代码时 Eclipse 不会解析 C user m2 repository 中存在的 jar 文件中存在的包 因此 它会给出很多编译错误 直到我通过 添加外部 Jar
  • 如何将 ChromeDriver 包含在 JAR 中?

    我正在编写一个网络自动化程序 到目前为止 它使用 Selenium 的 FirefoxDriver 运行良好 但是 如果未安装 Firefox 我想让它使用 Chrome 我下载了 ChromeDriver 将其放入 Eclipse 项目的
  • 由于 MultiReleaseException,jdeps 无法打印模块 deps

    我们有一个基于 JavaFX 的应用程序 它是not模块化 有原因 涉及遗留库 但我们使用构建自定义运行时jdeps and jlink 我们最近重写了该应用程序并添加了一些新的依赖项 并删除了其他依赖项 现在 正在构建应用程序的脚本突然停
  • 将库包含在jar中

    好的 这就是我们得到的 我们有两个库包 我们已将它们编译成 jar package starwars public class JarJar public void JarSayHello System out println Jaaaaa
  • 在 WAR 部署期间如何检查哪个类/jar 导致“无法从最终类继承”?

    我正在将 WAR 文件部署到 Windows 7 上的 Weblogic 12 1 2 服务器 也尝试过 Mac OS X 我遇到了一个例外 见下文 看起来其中一个类引用了某个父类的旧 新版本 该父类来自一些重复的 jar 我怎样才能找到哪
  • 找出用于制作 JAR 的 Scala 版本

    我试图弄清楚使用哪个 Scala 版本进行编译A jar 我有两个版本 一个来自我的 ivy2 存储库 另一个来自 Maven 运行后jar xf A jar 我苦苦寻找scala and version 但什么也没发现 grep ri s
  • 为什么我没有这个类,而它应该在 rt.jar 中?

    所以 我正在尝试在 java 中实现 LDAP 连接 这需要com sun jndi ldap LdapCtxFactory 贾芬德表明LdapCtxFactory应包含在rt jar 据我了解 这是java SDK的基础 Eclipse
  • 无法在 IntelliJ IDEA 2017.2.1 中使用 --patch-module 编译 Java 9 模块

    我正在尝试熟悉 Java 9 模块以及如何在 IntelliJ 中定义它们 除此之外 我想使用以下方法解决拆分包问题 patch module编译器 JVM 标志 我不知道如何使其在 IntelliJ 中工作 我正在使用 IntelliJ
  • 如何从命令行向 Android 项目添加外部 jar 库

    我正在尝试构建一个具有一些依赖项的 Android 项目 jar 文件位于 lib 目录中 我可以通过将这些 jar 文件添加到我的类路径来构建项目 但当然它会在模拟器中强制关闭 因为这些库不存在 我正在使用 ant 从命令行执行此操作 n
  • Android studio - 如何使用 gradle 中的可执行 jar 文件

    所以我有一个 custom rules xml 文件 我试图在 gradle 中重建 到目前为止 我对其他所有事情都没有问题 但我试图完成的最后一部分是在我使用 gradle 构建过程生成的未签名 apk 上运行一个特殊的 apk 签名工具
  • OSGI - 处理捆绑包所需的第 3 方 JAR

    我刚刚开始 OSGI 开发 正在努力了解如何最好地处理依赖的 JAR 也就是说 如果我要创建一个捆绑包 我很可能需要使用一些第 3 方 JAR 当我创建要部署到 OSGI 的捆绑包 JAR 时 显然不包含这些第 3 方 JAR 因此该捆绑包
  • C++ 中的模块路径到 Java JNI 调用

    当我用 C 创建 Java 8 JVM 时 我通常使用类似以下代码的内容来告诉 JVM 类路径 JavaVMOption options new JavaVMOption 1 JVM invocation options options 0
  • Leiningen 在构建可用的 uberjar 时遇到问题

    我们正在尝试与 Leiningen 一起构建我们的 Clojure 项目 我们通过执行以下操作成功创建了 uberjar 前提条件 project clj 文件列出了依赖项 main my project core在项目 clj中 core
  • 如何在eclipse或jar-file-explorer中查看jar文件的内容

    我正在开发一个项目 我需要知道我的网络项目中包含的 jar 文件的内容 我正在使用 Eclipse 朱诺 然而 Netbeans 提供了这些功能来查看 jar 文件的内容 请建议我如何在 eclipse 中实现这一点 在项目资源管理器中 您
  • Maven:从构建中排除测试

    我在项目的 src test java 文件夹中有一些类用作测试 当我使用标准 Maven 编译插件运行 Maven 时 这些项目被编译成 class 文件 并包含在打包编译代码的 jar 中 在运行 Maven 和构建我的版本之前 我已经
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为

随机推荐