【发布时间】: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>Settings>Build,Execution,Deployment>Compiler>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