web-dev-qa-db-fra.com

Echecs de compilation Intellij: "est déjà défini comme"

J'ai un projet scala qui compile, exécute et teste correctement lors de l'utilisation de SBT à partir de la ligne de commande. Cependant, lors de la construction du projet dans intellij, il semble que chaque classe du projet ait cette erreur dans le journal des événements, ce qui entraîne l'échec de la construction:

SendCommandToService is already defined as case class SendCommandToService
case class SendCommandToService(service: String, commandName: String, keys: Array[String], values: Array[String])
       ^
44
Nick

Cela signifie que deux classes compilées avec un paquet et un nom de classe identiques se trouvent dans votre chemin de classe. Un compilé par sbt, un compilé par IntelliJ. 

L'un des éléments suivants devrait pouvoir résoudre le problème:

  1. essayez de générer le fichier .iml IntelliJ avec sbt-idea plutôt que d’importer directement. 
  2. sbt clean before click Build -> Reconstruire dans IntelliJ 
  3. lors de la reconstruction avec IntelliJ, assurez-vous que sbt ne fonctionne pas
30
Max

Pour moi, la raison en est que myproject/src et myproject/src/main/scala sont marqués comme source. Donc, intellij n'a pas réussi à construire myproject/src/main/scala en raison des erreurs ci-dessus. Unmark Source from myproject/src (dans intellij, Fichier-> Structure du projet, sélectionnez Module myproject, sélectionnez le dossier src dans l’onglet Sources, supprimez-le de la source dans le volet "Ajouter une racine de contenu") a résolu le problème. J'espère que cela t'aides.

94
jiangok

J'ai eu le même problème et @Max a raison, il y a un conflit avec les classes compilées, mais la solution fournie n'a pas fonctionné pour moi. Il s’est avéré que j’utilisais sbt-idea pour générer la structure de projet IDEA en tant que solution de contournement d’un bogue Intellij IDEA 14 + du plugin scala sur l’importation SBT, qui n’a pas encore été corrigée. au moment où j'écris ceci. 

Afin de résoudre ce problème, j'ai dû supprimer src_managed/main/controller qui était en conflit avec src_managed/main dans les paramètres du module à cause d'un bogue sbt-idea . Vérifiez donc les dossiers source de votre module et assurez-vous de ne pas avoir de sous-dossiers en conflit avec un dossier parent déjà déclaré en tant que source.

5
Baztoune

J'ai eu un problème similaire à plusieurs reprises dans Idea et sans: SBT simple.

Il s'est avéré que CVS stocke des copies de certains fichiers * .scala dans le sous-répertoire CVS/Base, que SBT tente apparemment de compiler. Le problème a disparu lorsque j'ai supprimé les sous-répertoires CVS.

2
user3603546

Vous devez modifier "Paramètres -> Construire, Exécution, Déploiement -> Compilateur Scala -> Ordre de compilation" de "Mixte" en "Java, puis Scala". Si vous avez compilé le projet précédent, vous devez d’abord exécuter "sbt clean".

1
425940330

Dans mon cas, le problème était le protobuf plugin Idea :

  1. Supprimez le plugin idée protbuf.
  2. Fermer l'idée
  3. Supprimer tous les dossiers liés à idea (.idea et .idea_modules)
  4. Ouvrez Idea et importez à nouveau le projet.
0
angelcervera

Après la compilation de sbt, je devais marquer le dossier comme Generated Sources Root parce que j'avais besoin de ces fichiers pour la compilation.

0
Reeebuuk

J'ajouterai simplement le mien à la liste au cas où quelqu'un d'autre ferait cette erreur de débutant: j'ai temporairement "sauvegardé ma progression" en faisant cp Foo.scala Foo-save.scala, en oubliant que sbt essaierait de compiler tous les fichiers .scala du répertoire.

(Je ne sais pas, je pense que je pensais aux langages de programmation où tout fichier non explicitement included était ignoré ...)

Bien sûr, puisque le fichier principal et le fichier de "sauvegarde temporaire" définissaient les mêmes classes ... oui.

0
mercurial