web-dev-qa-db-fra.com

Intellij: le projet Scala basé sur SBT ne construit pas avec Java 9

J'ai essayé de passer mon projet basé sur Scala/sbt à Java 9 . Si je compile le projet avec sbt, cela fonctionne.

Si j'essaie de construire le projet avec l'option Construire d'IntelliJ, j'obtiens immédiatement l'erreur 

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

J'ai essayé d'ajouter le module en tant que dépendance

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

et ajouté dans les paramètres de compilation d'IntelliJ (javac et le compilateur scala)

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

mais ne aide pas, malheureusement.

13
Marco
  1. Ouvrez [Fichier -> Paramètres -> Construire, Exécuter, Déployer -> Compilateur]
  2. Ajoutez "--add-modules Java.se.ee" à [Processus de construction partagé VM options]
15
user8664964

Faire de cette question une réponse temporaire, à moins qu’il n’y ait une solution définitive, et regrouper quelques autres points.

On dirait que scala n’est pas encore complet en termes de disponibilité à utiliser JDK-9 comme visible sur scala/scala-dev - Support JDK 9


D'autre part, la manière de résoudre la dépendance au javax.xml.bind pourrait actuellement être classée en deux catégories: -

  • Votre projet utilise une bibliothèque qui, à son tour, requires javax.xml.bind, auquel cas il ne vous reste plus rien d'autre qu'attendre que cette bibliothèque passe à une structure modulaire avant votre restructuration. Cependant, ceci peut ensuite être piraté temporairement par l'option --add-modules javax.xml.bind fournie comme argument du compilateur.

  • Votre projet utilise directement le javax.xml.bind. Dans ce cas, la solution idéale consiste à s'éloigner du module et à utiliser la dépendance [jaxb-api:2.3.0] et le code de refactorisation en conséquence.

6
nullpointer

En plus de @nullpointer answer, brève instruction sur l'utilisation de --add-modules

Ouvrez File -> Settings -> Build, Execution, Deployment -> Compiler, Et ajoutez --add-modules Java.xml.bind à Shared build process VM options

 enter image description here

1
mjjaniec

En plus des réponses ci-dessus.

Si vous n'utilisez pas IntelliJ et n'exécutez le programme à partir de la console sbt, le problème suivant a été résolu:

  • Ajouter ce qui suit à votre build.sbt:

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

  • Ajout de la déclaration d'importation à votre contrôleur:

    importer javax.xml._

0
Pablo Rengifo