webentwicklung-frage-antwort-db.com.de

Intellij: Das SBT-basierte Scala-Projekt wird nicht mit Java 9 erstellt

Ich habe versucht, mein Scala/sbt-basiertes Projekt auf Java 9 zu ändern. Wenn ich das Projekt mit sbt kompiliere, funktioniert es.

Wenn ich versuche, das Projekt mit der Build-Option von IntelliJ zu erstellen, erhalte ich sofort den Fehler 

Error:Module 'xyz' production: Java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

Ich habe versucht, das Modul als Abhängigkeit hinzuzufügen

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

und in den Compiler-Einstellungen von IntelliJ hinzugefügt (javac sowie der Scala-Compiler)

  <option name="ADDITIONAL_OPTIONS_STRING" value="--add-modules Java.xml.bind" />

hilft aber leider nicht.

13
Marco
  1. Öffnen Sie [File -> Settings -> Build, Execution, Deployment -> Compiler]
  2. Fügen Sie "--add-modules Java.se.ee" den Optionen für [Shared Build Process VM] hinzu.
15
user8664964

Dies als Antwort zu verschieben, um als vorübergehender Vorschlag zu dienen, es sei denn, es gibt eine eindeutige Lösung und es werden nur wenige andere Punkte zusammengetragen.

Es scheint, als wäre scala noch nicht vollständig in Bezug auf die Bereitschaft, mit JDK-9 verwendet zu werden, als sichtbar unter scala/scala-dev - Support JDK 9


Auf der anderen Seite könnte die Lösung der Abhängigkeit von javax.xml.bind derzeit in zwei Kategorien unterteilt werden:

  • Ihr Projekt verwendet eine Bibliothek, die wiederum requires javax.xml.bind ist. In diesem Fall liegt nicht viel in Ihren Händen, als darauf zu warten, dass diese Bibliothek vor der Umstrukturierung in eine modulare Struktur verschoben wird. Dies kann jedoch vorübergehend mit der als Compiler-Argument angegebenen --add-modules javax.xml.bind-Option gehackt werden.

  • Ihr Projekt verwendet den javax.xml.bind direkt. In diesem Fall ist es die ideale Lösung, sich vom Modul zu entfernen und die Abhängigkeit [jaxb-api:2.3.0] und den Refactor-Code entsprechend zu verwenden.

6
nullpointer

Neben der Antwort von @nullpointer kurze Anweisungen zur Verwendung von --add-modules

Öffnen Sie File -> Settings -> Build, Execution, Deployment -> Compiler, Und fügen Sie --add-modules Java.xml.bind zu Shared build process VM options hinzu.

 enter image description here

1
mjjaniec

Zusätzlich zu den obigen Antworten.

Wenn Sie IntelliJ nicht verwenden und das Programm von der sbt-Konsole aus ausführen, habe ich folgendes Problem gelöst:

  • Fügen Sie Folgendes zu Ihrem build.sbt hinzu:

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

  • Hinzufügen der Importanweisung zu Ihrem Controller:

    javax.xml._ importieren

0
Pablo Rengifo