【问题标题】:java 9 modules, NoClassDefFoundError: java.sql.Datejava 9 模块,NoClassDefFoundError: java.sql.Date
【发布时间】:2023-04-11 08:21:02
【问题描述】:

我尝试使用 java 9 运行我们的 java 8 gradle 项目,因为我们正在寻求迁移到它。但是,在执行单元测试时,我得到一个

java.lang.ClassNotFoundException: java.sql.Date异常

com.fasterxml.jackson.databind.deser.std.DateDeserializers抛出

在代码中看起来像这样:

static {
    Class<?>[] numberTypes = new Class<?>[] {
        ...
        java.sql.Date.class,
        ...
    };
    ...
}

我在网上看了一圈,显然,如果你想避免为每个模块创建一个module-info.java 文件,你必须添加参数--add-modules java.sql

我正在使用 intellij,并已将参数添加到 File&gt;Settings&gt;Build,Execution,Deployment&gt;Compiler&gt;Java Compiler 中的 javac 参数以及作为 VM 选项的运行配置中,但我仍然遇到异常。

有没有更简单的方法可以做到这一点,或者我做错了什么? 谢谢

编辑: IntelliJ 版本:

IntelliJ IDEA 2018.1.5 (Community Edition)
Build #IC-181.5281.24, built on June 12, 2018
JRE: 1.8.0_152-release-1136-b39 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

【问题讨论】:

  • 你的 intelliJ 版本是什么,你能告诉我们你完整的执行配置表格吗?
  • 如果你不创建module-info.java,那么所有的Java SE模块,其中的java.sql,都会在运行时可用,所以你不需要--add-modules。肯定有其他问题。
  • 你能粘贴一些堆栈跟踪来帮助诊断吗?一个可能的原因是图片中有一个自定义类加载器正在委托给引导加载器(java.sql 模块映射到平台类加载器)。另一个原因是您已经迁移到模块并错过了requires java.sql(但这并不能解释代码是如何编译的)。
  • 如果你创建了module-info.java,你应该继续前进,只需添加“requires java.sql;”

标签: java gradle intellij-idea java-9


【解决方案1】:

在我删除 jdk9 并重新添加后问题自行解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2018-05-02
    • 1970-01-01
    • 2018-03-19
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多