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.
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.
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._