Java 9: ​​java.lang.ClassNotFoundException: java.sql.SQLException в приложении Spring Boot

Я создал приложение Spring Boot с Java 9 ... sourceCompatibility = 9 targetCompatibility = 9 ... и запустил его с помощью: java --module-path lib -m my.app. ...

    Caused by: java.lang.NoClassDefFoundError: java/sql/SQLException
        at [email protected]/org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:161)
        at [email protected]/org.springframework.boot.SpringApplication.createSpringFactoriesInstances(SpringApplication.java:436)
        ... 5 more
Caused by: java.lang.ClassNotFoundException: java.sql.SQLException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 7 more

Примечание: я успешно запустил приложение, используя путь к классам вместо --module-path

Изменить: Спасибо за ваши советы! Наконец, я нашел «волшебную смесь» для запуска приложения. Я изменил командную строку, удалил javax.transaction-api-1.2.jar из библиотеки и поместил его в путь к классам, чтобы удалить пакет (javax.transaction.xa), разделив конфликт между модулями java.sql и javax.transaction.api

java --module-path lib --add-modules java.sql,java.instrument,java.xml.bind -cp javax.transaction-api-1.2.jar -m my.app

person zncoder    schedule 17.12.2017    source источник
comment
Вы можете показать нам определения информации о модулях?   -  person Barath    schedule 17.12.2017
comment
Кроме того, отредактируйте свой вопрос с помощью полной команды, используемой для запуска приложения как для пути к классам, так и для пути к модулю? Также было бы неплохо узнать, какая версия пружинного ботинка используется.   -  person Naman    schedule 17.12.2017
comment
Spring.beans - это автоматический модуль? Я предполагаю, что проблема в том, что нет модуля requires java.sql, поэтому модуль java.sql не входит в набор модулей, которые разрешены как запуск (запустите с --show-module-resolution, чтобы проверить это). Это сложная область с автоматическими модулями, иногда вам нужно использовать --add-modules, чтобы принудительно разрешить дополнительные явные модули. В этом случае вам понадобится --add-modules java.sql, поскольку он не требуется ни одному модулю, и поэтому он не будет разрешен.   -  person Alan Bateman    schedule 17.12.2017
comment
@Barath нет определения модуля - автоматический модуль.   -  person zncoder    schedule 17.12.2017
comment
Командная строка @nullpointer для пути к модулю находится в исходном сообщении. Чтобы начать с cp, я использовал стандартную летучую мышь, созданную с помощью задачи installDist gradle. Версия весенней загрузки находится в трассировке стека.   -  person zncoder    schedule 17.12.2017
comment
@zncoder, поскольку вы читаете их как автоматические модули, предложение Алана об использовании --add-modules java.sql должно помочь. Как я уже сказал, полные команды пока не видны в вопросе. Было бы хорошо увидеть, что работает, а что нет с точки зрения команд.   -  person Naman    schedule 17.12.2017
comment
@AlanBateman Вы правы. Это автоматический модуль. Пробовал --add-module java.sql - та же ошибка.   -  person zncoder    schedule 17.12.2017
comment
Вы можете показать всю команду? (Просто проверьте, что вы поставили --add-modules перед опцией -m или --module).   -  person Alan Bateman    schedule 17.12.2017
comment
@AlanBateman, Спасибо за подсказку. После того, как я поместил --add-modules перед -m, исходная ошибка исчезла. Теперь у меня проблема с разделением пакета: java.lang.module.ResolutionException: модули java.sql и javax.transaction.api экспортируют пакет javax.transaction.xa в модуль com.fasterxml.jackson.core   -  person zncoder    schedule 18.12.2017
comment
Я удалил javax.transaction-api-1.2.jar из папки lib, следовательно, из пути к модулю: java.lang.ClassNotFoundException: java.lang.instrument.ClassFileTransformer. Теперь пора найти модуль, содержащий ClassFileTransformer, и попробовать ту же процедуру, что и с sqlexception.   -  person zncoder    schedule 18.12.2017
comment
ClassFileTransformer находится в модуле java.instrument - ›NoClassDefFoundError: javax / transaction / SystemException. Похоже, мне нужно добавить несколько модулей в --add-modules.   -  person zncoder    schedule 18.12.2017
comment
Если вы запустите jdeps для файла JAR spring.boot, это поможет вам определить модули, которые требуются spring.boot. В качестве альтернативы используйте --add-modules java.se. Что касается javax.transaction-api-1.2.jar, то сейчас находится обслуживающий выпуск JSR 907, в котором предлагается удалить пакет javax.transaction.xa. Java SE предоставляет пакет xa, начиная с Java SE / JDK 1.4, поэтому немногие заметят, если версия JTA для Java EE откажется от него.   -  person Alan Bateman    schedule 18.12.2017
comment
@AlanBateman, Спасибо за информацию. Итак, после применения JSR 907 я верну javax.transaction-api-1.2.jar из пути к классам в путь к модулю.   -  person zncoder    schedule 18.12.2017