web-dev-qa-db-ja.com

Intellij:SBTベースのScalaプロジェクトは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" />

しかし、残念ながら役に立ちません。

13
Marco
  1. [ファイル->設定->ビルド、実行、展開->コンパイラ]を開きます
  2. -add-modules Java.se.ee」を[共有に追加ビルドプロセスVM options]
15
user8664964

これを答えとして移動し、明確な解決策がない限り一時的な提案として機能し、他のいくつかのポイントをまとめます。

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]を利用し、それに応じてコードをリファクタリングすることです。

6
Naman

@nullpointerの回答に加えて、--add-modulesの使用方法に関する簡単な説明

File-> Settings-> Build, Execution, Deployment-> Compilerを開き、--add-modules Java.xml.bindShared build process VM optionsに追加します

enter image description here

1
mjjaniec

上記の答えに加えて。

IntelliJを使用しておらず、sbtコンソールからプログラムを実行している場合、次の問題が解決したことがわかりました。

  • Build.sbtに以下を追加します。

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

  • コントローラにインポートステートメントを追加する:

    javax.xml._をインポートします

1
Pablo Rengifo