Intellij:基于 SBT 的 Scala 项目不使用 Java 9 构建
Intellij: SBT-based Scala project does not build with Java 9
我已经尝试将基于 Scala/sbt 的项目切换到 Java 9。
如果我用 sbt 编译项目,它就可以工作。
如果我尝试使用 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" />
但不幸的是没有帮助。
除非有明确的解决方案,否则将此作为一个临时建议作为答案移动并结合其他几点。
好像是scala is not yet complete in terms of readiness to be used with JDK-9 as visible at 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
] 并相应地重构代码。
除了@nullpointer 回答外,简短说明如何使用--add-modules
打开File
-> Settings
-> Build, Execution, Deployment
-> Compiler
,
并将 --add-modules java.xml.bind
添加到 Shared build process VM options
- 打开[文件 -> 设置 -> 构建、执行、部署 ->
编译器]
- 添加“--add-modules java.se.ee”到[Shared build process VM options ]
除以上答案外
如果您没有使用 IntelliJ 和 运行 来自 sbt 控制台的程序,我发现以下解决了问题:
将以下内容添加到您的 build.sbt:
libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.0"
将导入语句添加到您的控制器:
进口javax.xml._
我已经尝试将基于 Scala/sbt 的项目切换到 Java 9。 如果我用 sbt 编译项目,它就可以工作。
如果我尝试使用 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" />
但不幸的是没有帮助。
除非有明确的解决方案,否则将此作为一个临时建议作为答案移动并结合其他几点。
好像是scala is not yet complete in terms of readiness to be used with JDK-9 as visible at 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
] 并相应地重构代码。
除了@nullpointer 回答外,简短说明如何使用--add-modules
打开File
-> Settings
-> Build, Execution, Deployment
-> Compiler
,
并将 --add-modules java.xml.bind
添加到 Shared build process VM options
- 打开[文件 -> 设置 -> 构建、执行、部署 -> 编译器]
- 添加“--add-modules java.se.ee”到[Shared build process VM options ]
除以上答案外
如果您没有使用 IntelliJ 和 运行 来自 sbt 控制台的程序,我发现以下解决了问题:
将以下内容添加到您的 build.sbt:
libraryDependencies += "javax.xml.bind" % "jaxb-api" % "2.3.0"
将导入语句添加到您的控制器:
进口javax.xml._