web-dev-qa-db-fra.com

scala-bibliothèque importée deux fois?

J'essaie juste d'exécuter une simple application Hello World dans Scala sur Intellij avec SBT mais même cela ... cela semble être beaucoup trop difficile.

J'ai suivi les instructions ici: https://www.cloudera.com/tutorials/setting-up-a-spark-development-environment-with-scala/.html

Je travaille avec Eclipse et Maven ... Ici, je suis sur Intellij et SBT donc je fais de mon mieux mais je suis un peu perdu. Voici ce que j'ai fait:

  • J'ai installé Intellij, SBT.
  • J'ai configuré le lanceur SBT dans Intellij en définissant Fichier> Paramètres> Build, Execution, Deployment> Build tools> sbt> Launcher
  • Créer un nouveau projet avec Java 1.8, SBT 1.3, Scala 2.13
  • À cette étape, je n'ai pas pu créer la classe Scala, mais j'ai remarqué que si je "réimportais le projet sbt", la classe scala apparaîtra dans la liste des nouvel élément à créer.
  • Créez un objet avec la méthode principale:
    object HelloScala {
      def main(args: Array[String]): Unit = {
        println("Hello world!")
      }
    }

Lorsque j'essaie d'exécuter ce principal, il en résulte l'erreur suivante:

Erreur: scalac: plusieurs fichiers 'scala-library * .jar' (scala-library-2.13.0.jar, scala-library-2.13.0.jar) dans Scala chemin de classe du compilateur dans = Scala SDK sbt: org.scala-lang: scala-library: 2.13.0: jar

Mon build.sbt:

name := "HelloScala"
version := "0.1"
scalaVersion := "2.13.0"

J'ai vérifié le chemin de classe du compilateur dans Fichier> Structure du projet> Bibliothèques> Chemin de classe du compilateur:

fichier: ///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar
Fichier : ///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.13.0/scala-compiler-2.13. 0.jar
Fichier : ///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.0/scala-library-2.13. 0.jar
Fichier : ///AppData/Local/Coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.0/scala-reflect-2.13. 0.jar

J'ai essayé de supprimer le répertoire cible, d'invalider le cache, de régénérer le dossier .idea en le supprimant et de laisser intellij le recréer, j'ai cherché dans un autre scala-library.jar dans la structure du projet. Je n'ai rien trouvé...

Vraiment ... Je ne comprends pas pourquoi la scala-library est référencée deux fois.

Si je change la version scala de 2.13.0 à 2.11.0, même problème:

Erreur: scalac: plusieurs fichiers 'scala-library * .jar' (scala-library-2.11.0.jar, scala-library-2.11.0.jar) dans Scala chemin de classe du compilateur dans = Scala SDK sbt: org.scala-lang: scala-library: 2.11.0: jar

MAIS ! Si je commente la version scala dans le build.sbt:

name := "HelloScala"
version := "0.1"
//scalaVersion := "2.11.0"

Ensuite, si j'efface le répertoire cible, réimporte le projet sbt et essaie de l'exécuter, cela fonctionne! Et dans le répertoire cible, j'ai un nouveau dossier scala-2.12 ... D'où il vient?!

Pour plus d'informations, je suis sur Windows 10, Intellij 2019.2, JDK 1.8, SBT 13

Toute aide est vraiment appréciée!

23
cenote

Essaye ça:

Bibliothèques externes> [Clic droit] sbt: org.scala-lang: scala-library: x.x.x: jar> Ouvrir les paramètres de la bibliothèque> Paramètres du projet> Bibliothèques

Il y a une section avec les classes, les sources et les JavaDocs. Cliquez sur JavaDocs et supprimez-le avec le signe moins ci-dessus. Cliquez sur OK.

Réimportez votre projet sbt (dans la barre d'outils sbt à droite).


Vous ne savez toujours pas pourquoi l'erreur se produit ou pourquoi cela la corrige.

30
Jeffmylife

TL; DR

Retournez vos projets IDEA à sbt 1.2.8

Select sbt version 1.2.8 in the New Project dialog


Détails

Je me bats avec le même problème ce week-end avec une nouvelle installation d'IntelliJ IDEA. J'ai essayé différentes versions de l'EDI et certains des autres correctifs suggérés ci-dessus, mais la seule solution qui semblait vraiment fonctionner était de modifier manuellement le fichier .idea/libraries/sbt__org_scala_lang_scala_library_2_13_0_jar.xml Généré automatiquement pour supprimer les entrées JAR en double.

J'ai finalement fait le lien entre l'erreur et la nouvelle version sbt quand j'ai remarqué cette boîte de dialogue dans mon shell:

[info] Welcome to sbt 1.3.0.
[info] Here are some highlights of this release:
[info]   - Coursier: new default library management using https://get-coursier.io
[info]   - Super Shell: displays actively running tasks
[info]   - Turbo mode: makes `test` and `run` faster in interactive sessions. Try it by running `set ThisBuild / turbo := true`.
[info] See https://www.lightbend.com/blog/sbt-1.3.0-release for full release notes.

Depuis l'introduction de sbt 1.3.0 Coursier , et les entrées JAR en double dans les fichiers XML générés par IDEA ont toutes été stockées dans un Répertoire cache du coursier , je pensais que le retour à sbt 1.2.8 pourrait résoudre le problème.

Effectivement, je ne reçois l'erreur "Multiple 'scala-library * .jar' files" lors de l'utilisation de sbt 1.3.0. J'ai recréé mon projet plusieurs fois et je n'ai pas vu l'erreur lors de l'utilisation de sbt 1.2.8.

5
DaoWen

Si vous n'avez pas de propriété scalaVersion dans votre build.sbt, sbt utilisera la version spécifiée dans project/build.sbt

0