Intellij: проект Scala на основе SBT не строится с помощью Java 9

Я попытался переключить проект на основе Scala/sbt на Java 9. Если я скомпилирую проект с помощью sbt, он работает.

Если я попытаюсь построить проект с опцией Build IntelliJ, я сразу же получу ошибку

Error:Module 'xyz' production: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

Я попытался добавить модуль как зависимость

libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.0"

и добавлен в настройки компилятора IntelliJ (javac, а также компилятор scala)

  <option name="ADDITIONAL_OPTIONS_STRING" value="--add-modules java.xml.bind" />

но не помогает, к сожалению.

Ответ 1

  • Открыть [Файл → Настройки → Сборка, выполнение, развертывание → Компилятор]
  • Добавить "--add-modules java.se.ee" в [Общие параметры VM процесса сборки]

Ответ 2

Перемещение этого в качестве ответа, чтобы послужить временным предложением, если не будет определенного решения для него и соединить несколько других пунктов.

Похоже, еще не полный с точки зрения готовности к использованию с JDK-9 как видимый на scala/scala-dev - поддержка JDK 9


С другой стороны, способ решения зависимости от javax.xml.bind можно разделить на две категории: -

  • В вашем проекте используется библиотека, которая, в свою очередь, requires javax.xml.bind, и в этом случае в ваших руках не так много, кроме как ждать, пока эта библиотека перейдет к модульной структуре до вашей реструктуризации. Однако это может быть временно взломана опцией --add-modules javax.xml.bind, предоставленной в качестве аргумента компилятора.

  • В вашем проекте используется javax.xml.bind напрямую. В этом случае идеальным решением является переход от модуля и использование зависимости [jaxb-api:2.3.0] и кода рефакто ра соответственно.

Ответ 3

В дополнение к ответу @nullpointer, краткая инструкция по использованию --add-modules

Откройте FileSettingsBuild, Execution, DeploymentCompiler, и добавьте --add-modules java.xml.bind в Shared build process VM options

введите описание изображения здесь