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 は、 scala/scala-dev-Support JDK 9 で表示されるように、JDK-9で使用する準備が整っていないようです。
一方、javax.xml.bind
への依存関係を解決する方法は、現在2つのカテゴリに分類できます。-
プロジェクトはライブラリを使用します。ライブラリはrequires javax.xml.bind
になります。この場合、再構築する前にそのライブラリがモジュラー構造に移動するのを待つ以外に、手元にあるものはほとんどありません。ただし、これは、コンパイラの引数として提供される--add-modules javax.xml.bind
オプションによって一時的にハッキングされる可能性があります。
プロジェクトはjavax.xml.bind
を直接利用します。この場合、理想的な解決策は、モジュールから離れて依存関係[jaxb-api:2.3.0
]を利用し、それに応じてコードをリファクタリングすることです。
上記の答えに加えて。
IntelliJを使用しておらず、sbtコンソールからプログラムを実行している場合、次の問題が解決したことがわかりました。
Build.sbtに以下を追加します。
libraryDependencies + = "javax.xml.bind"% "jaxb-api"% "2.3.0"
コントローラにインポートステートメントを追加する:
javax.xml._をインポートします