【问题标题】:Intellij: SBT-based Scala project does not build with Java 9Intellij:基于 SBT 的 Scala 项目不使用 Java 9 构建
【发布时间】:2018-03-05 00:12:22
【问题描述】:

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

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

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" />

但不幸的是,没有帮助。

【问题讨论】:

标签: scala intellij-idea java-9


【解决方案1】:
  1. 打开 [文件 -> 设置 -> 构建、执行、部署 -> 编译器]
  2. 将“--add-modules java.se.ee”添加到 [共享构建过程 VM 选项]

【讨论】:

  • 如果我没有 Intellij 但正在使用 sbt 怎么办?
【解决方案2】:

将此作为答案作为临时建议,除非有明确的解决方案并将其他几点结合在一起。

似乎 尚未准备好与JDK-9 一起使用,如scala/scala-dev - Support 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

    打开File -> Settings -> Build, Execution, Deployment -> Compiler, 并将--add-modules java.xml.bind 添加到Shared build process VM options

    【讨论】:

    • 这对你有用吗?如果我尝试重新编译,我会收到“启动层java.lang.module.FindException 初始化期间发生错误:找不到模块javax.xml.bind”。我在 sbt 中添加了 libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.0"。
    【解决方案4】:

    除了以上答案。

    如果您没有使用 IntelliJ 并从 sbt 控制台运行程序,我发现以下解决了该问题:

    • 将以下内容添加到您的 build.sbt:

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

    • 将导入语句添加到您的控制器:

      导入 javax.xml._

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 1970-01-01
      • 2015-01-02
      • 2017-03-22
      • 2012-01-07
      • 2016-10-26
      • 2015-01-10
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多