Intellij:基于SBT的Scala项目不是用Java 9构建的

Mar*_*rco 13 scala intellij-idea java-9

我试图将我的基于Scala/sbt的项目切换到Java 9.如果我使用sbt编译项目,它可以工作.

如果我尝试使用IntelliJ的Build选项构建项目,我会立即得到错误

Error:Module 'xyz' production: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
Run Code Online (Sandbox Code Playgroud)

我试图将模块添加为依赖项

libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.0"
Run Code Online (Sandbox Code Playgroud)

并添加到IntelliJ的编译器设置中(javac以及scala编译器)

  <option name="ADDITIONAL_OPTIONS_STRING" value="--add-modules java.xml.bind" />
Run Code Online (Sandbox Code Playgroud)

但不幸的是,没有帮助.

小智 15

  1. 打开[ 文件 - >设置 - >构建,执行,部署 - >编译器 ]
  2. 将" --add-modules java.se.ee " 添加到[ Shared build process VM options ]

  • 如果我没有Intellij但正在使用sbt怎么办? (2认同)

Nam*_*man 6

把它作为一个临时建议的答案,除非有一个明确的解决方案,并将其他几点联系在一起.

似乎尚未完成,因为在scala/scala-dev中可以看到与JDK-9一起使用的准备就绪- 支持JDK 9


另一方面,解决依赖性的javax.xml.bind方式目前可分为两类: -

  • 您的项目使用了一个库requires javax.xml.bind,在这种情况下,除了在重组之前等待该库移动到模块化结构之外,您手中没有太多东西.但是,这可以通过--add-modules javax.xml.bind作为编译器参数提供的选项暂时被攻击.

  • 您的项目javax.xml.bind直接使用.在这种情况下,理想的解决方案是远离模块并相应地使用依赖[ jaxb-api:2.3.0]和重构代码.