Я пробовал запустить наш проект Gradle Java 8 с Java 9, так как мы хотим перейти на него. Однако при выполнении модульного теста я получаю
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 и добавил параметр к аргументам javac в File>Settings>Build,Execution,Deployment>Compiler>Java Compiler, а также в параметре run config as 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
Если вы не создадите module-info.java, все модули Java SE, в том числе java.sql, будут доступны во время выполнения, поэтому вам не понадобится --add-modules. Что-то еще должно быть не так.
Можете ли вы вставить часть трассировки стека, чтобы помочь диагностировать это? Одна из возможных причин заключается в том, что на картинке есть пользовательский загрузчик классов, который делегирует загрузчику (модуль java.sql сопоставлен с загрузчиком классов платформы). Другая причина в том, что вы перешли на модули и пропустили requires java.sql (но это не объясняет, как был скомпилирован код).
Если вы создали module-info.java, в дальнейшем просто добавьте «требует java.sql;»




Проблема исчезла сама собой после того, как я удалил jdk9 и снова добавил его.
Какая у вас версия intelliJ, и можете ли вы показать нам свои полные конфигурации выполнения из intelliJ?