wake-up-neo.com

Intellij-Kompilierungsfehler: "ist bereits definiert als"

Ich habe ein Scala-Projekt, das kompiliert, ausgeführt und getestet wird, wenn SBT von der Befehlszeile aus verwendet wird. Beim Erstellen des Projekts in intellij scheint jedoch jede Klasse im Projekt diesen Fehler im Ereignisprotokoll zu haben, wodurch der Build fehlschlägt:

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

Das bedeutet, dass es zwei kompilierte Klassen mit identischem Paket- und Klassennamen in Ihrem Klassenpfad gibt. Einer von sbt, einer von IntelliJ. 

Eine der folgenden Möglichkeiten sollte das Problem lösen können:

  1. versuchen Sie, eine IntelliJ-.iml-Datei mit sbt-idea zu erstellen, anstatt sie direkt zu importieren. 
  2. sbt clean, bevor Sie in IntelliJ auf Build -> Rebuild klicken 
  3. stellen Sie beim Neuaufbau mit IntelliJ sicher, dass "sbt" nicht ausgeführt wird
30
Max

Der Grund ist für mich, dass sowohl myproject/src als auch myproject/src/main/scala als Quelle markiert sind. Daher konnte Intellij myproject/src/main/scala aufgrund der obigen Fehler nicht erstellt werden. Heben Sie die Markierung der Quelle von myproject/src auf (wählen Sie in intellij unter "Datei-> Projektstruktur" mein Projektmodul aus, wählen Sie den Ordner "src" auf der Registerkarte "Quellen" aus, entfernen Sie ihn aus dem Bereich "Quelle" im Bereich "Inhaltsstamm hinzufügen"). Hoffe das hilft.

94
jiangok

Ich hatte das gleiche Problem und @Max hat recht, es gibt einen Konflikt mit den kompilierten Klassen, aber die gelieferte Lösung hat für mich nicht funktioniert. Es stellt sich heraus, dass ich sbt-idea verwendet habe, um die IDEA - Projektstruktur als Workaround eines Intellij IDEA 14 + Scala-Plug-In-Bug auf dem SBT-Import zu generieren, der noch nicht behoben ist zu der zeit schreibe ich das. 

Um das Problem zu beheben, musste ich src_managed/main/controller entfernen, das in Konflikt mit src_managed/main in den Moduleinstellungen stand, aufgrund eines sbt-idea-Fehlers . Überprüfen Sie also die Quellordner Ihres Moduls und stellen Sie sicher, dass keine Unterordner mit einem übergeordneten Ordner in Konflikt stehen, der bereits als Quelle deklariert ist.

5
Baztoune

Ich hatte immer wieder ein ähnliches Problem, sowohl innerhalb als auch außerhalb von: einfach SBT.

Es stellte sich heraus, dass CVS Kopien von * .scala -Dateien im Unterverzeichnis CVS/Base speichert, das SBT anscheinend zu kompilieren versucht. Das Problem wurde behoben, als ich die CVS-Unterverzeichnisse löschte.

2
user3603546

Sie müssen "Einstellungen -> Build, Ausführung, Bereitstellung -> Scala-Compiler -> Kompilierreihenfolge" von "Gemischt" in "Java dann Scala" ändern. Wenn Sie das Projekt zuvor kompiliert haben, sollten Sie zuerst "sbt clean" ausführen.

1
425940330

In meinem Fall war das Problem das Protobuf Idea Plugin :

  1. Entfernen Sie das Idee-Protbuf-Plugin.
  2. Idee schließen
  3. Entfernen Sie alle Ordner, die mit idea (.idea und .idea_modules) zusammenhängen.
  4. Idee öffnen und Projekt erneut importieren.
0
angelcervera

Nach dem sbt-Kompilieren musste ich den Ordner als Generated Sources Root markieren, weil ich diese Dateien zum Kompilieren brauchte.

0
Reeebuuk

Ich füge meine nur der Liste hinzu, falls jemand anderes diesen Anfängerfehler gemacht hat: Ich habe "temporär meinen Fortschritt gespeichert", indem ich cp Foo.scala Foo-save.scala machte, wobei ich vergaß, dass sbt versucht, alle .scala-Dateien im Verzeichnis zu kompilieren.

(Ich weiß nicht, ich denke ich dachte an Programmiersprachen, in denen Dateien, die nicht explizit included waren, ignoriert wurden ...)

Natürlich, da sowohl die Hauptdatei als auch die "temporäre Sicherungsdatei" dieselben Klassen definiert haben ... ja.

0
mercurial