wake-up-neo.com

Wie kann ein Scala-sbt-verwaltetes Projekt in IDEA vollständig gereinigt, neu aufgelöst und neu erstellt werden?

TL; DR: Wie kann ich alle Abhängigkeiten in IntelliJ vollständig abgleichen, wenn sich die SBT-Datei ändert

Ich habe ein SBT-Projekt in IntelliJ eingerichtet. Meistens funktioniert das zwar wie ein Zauber, aber es ist mir ein Schmerz, die Version der Abhängigkeiten und Compiler zu ändern.

Ich hoffe, ich kann meine SBT-Datei aktualisieren und in IntelliJ auf etwas wie clean project klicken, damit sie auf dem neuesten Stand ist.

Der beste Menüpunkt, den ich gefunden habe, ist Rebuild project. Es liest neue Abhängigkeiten, behält jedoch die alten bei, sodass External Libraries mehrere Versionen der Scala-Laufzeit- und Drittanbieter-Bibliotheken enthält.

Um dies zu umgehen, kann ich IntelliJ schließen und alle Dateien in .idea/libraries löschen. Wenn ich IntelliJ neu starte, werden die Abhängigkeiten neu aufgelöst. Es funktioniert zwar, aber das manuelle Löschen von Metadatendateien zeigt an, dass ich das Falsche mache.

38
Tobber

So aktualisieren Sie IntelliJ nach Änderungen in * .sbt-Dateien:

  • Öffnen Sie den Bereich SBT-Projekt (Menü Ansicht/Werkzeugfenster/SBT).
  • Klicken Sie mit der rechten Maustaste auf Ihr SBT-Projekt
  • Wählen Sie Externes Projekt aktualisieren

 enter image description here

9
Polymerase

Wenn Sie die SBT-Datei speichern, wird das Projekt normalerweise von IntelliJ IDEA aktualisiert. Wenn nicht, können Sie es manuell tun.

Im SBT-Fenster befindet sich die Schaltfläche Alle SBT-Projekte aktualisieren:

 enter image description here  enter image description here

Bei der Gelegenheit, dass IDEA immer noch verwirrt ist und keine Pakete findet, die Sie gerade hinzugefügt haben:

Über das Menü Datei:

 Invalidate Cache ScreenShot

Es ist ein ziemlich großer Hammer, der einen Neustart der App erfordert und den IntelliSense-Index mehrere Minuten neu erstellt. Es ist jedoch gelegentlich das einzige, was IDEA dazu bringt, Ihre neuen SBT-Pakete zu erkennen.

7
Brent Faust

Ist mir schon mal passiert und ja, ist eine PITA. 

Normalerweise entferne ich manuell alle Abhängigkeiten aus dem Projekt und lasse dann sbt erneut importieren, was tatsächlich benötigt wird. Tun Sie dies jedoch nicht auf der Benutzeroberfläche, da selbst bei Mehrfachauswahl eine Bestätigung für JEDE Abhängigkeit erforderlich ist! (Sie werden eine Stunde lang auf "Ja, ich bin sicher" klicken). Stattdessen gehen Sie direkt aus der .iml-Projektdatei in Ihrem .idea/modules-Verzeichnis und löschen.

4
Daniel Langdon

versuchen Sie folgende Schritte:

  1. schließen Sie IntelliJ
  2. sichern Sie den gesamten Projektordner
  3. löschen Sie den .idea-Ordner
  4. zielordner löschen
  5. projekt-/Zielordner löschen
  6. Öffnen Sie IntelliJ erneut und importieren Sie es als Sbt-Projekt

Beachten Sie, dass dies nur für SBT-Projekte gilt

2
Max

Ein weiterer schwerer Hammer scheint aber zu funktionieren.

  1. Schließen Sie IntelliJ
  2. .idea Ordner löschen
  3. App aus vorhandenen Quellen importieren
1
cevaris

Ich habe verschiedene Versionen von sbt und scala für verschiedene Projekte verwendet und IntelJi wurde irgendwie verwirrt. Ich kann das Problem nur beheben, indem Sie die Cache-Ordner sbt und ivy2 entfernen: 

rm -rf ~/.ivy2
rm -rf ~/.sbt
1
Yuchen Zhong

Was für mich funktioniert hat, war:

1) Schließen Sie IntelliJ

2) .idea/libraries Interna löschen

3) Starten Sie IntelliJ

4) Rechtsklick auf pom.xml Maven > Reimport

Danach gab es keine alten Versionen und doppelten Bibliotheken in den externen Bibliotheken.

0

IDEE 2016.2.4

Keine dieser Lösungen hat bei mir funktioniert.

**** BEVOR SIE DAS OBEN GENANNTE VERSUCHEN. MACHEN SIE EINE SICHERUNG DES PROJEKTS SBT/IDEA IN QUESTION *****

Wenn ich die Datei 'build.sbt' aktualisiert habe, wurden die Abhängigkeiten der externen Bibliothek von der Projektansicht nicht aktualisiert. Außerdem zeigte die Projektstruktur noch die alten Abhängigkeiten. Egal, was ich versucht habe IDEA würde nicht aktualisiert.

Die einzige Möglichkeit, eine teilweise Wiederherstellung durchzuführen, bestand darin, den Ordner ".idea" von einem anderen Computer zu kopieren. Die Implementierung des SBT-Plugins ist **** ed! Ich habe zuvor den Ordner '.idea/libraries' entfernt und dann IDEA diesen Ordner nicht wiederhergestellt. Ich habe oft versucht, das Projekt erneut zu importieren.

Sehr schlecht :(

ADDENDUM: Ich habe mein Projekt zum Laufen gebracht. Ich denke, SBT mit IDEA ist nicht mehr ganz schuld. Möglicherweise ist mein Apache Ivy 2-Cache beschädigt. Also habe ich folgende Befehle ausgeführt:

$ rm -rf ~/.ivy2/cache/org.scalatest/scalatest_2.11/*
$ rm -rf ~/.ivy2/cache/org.scalactic/scalactic_2.11/*

IDEA mit ungültigem Cache unter dem Dropdown-Menüelement "Datei" neu gestartet. Dies schien einige interne Aktionen in IDEA und SBT auszulösen. Ich habe auch versucht, manuell JARs über die IDE hinzuzufügen, aber es wurde massiv verwirrt. Die Moral der Geschichte ist es, täglich an zwei verschiedenen Laptops zu arbeiten und sie auf dem neuesten Stand zu halten.

Überprüfen Sie auch SBT von der Kommandozeile aus. Ich habe 0.13.12 verwendet

$ sbt about
$ sbt clean
$ sbt test

Überprüfen Sie dies auch mit dem SBT-Abhängigkeits-Plugin.

0
peter_pilgrim

Stimmen Sie zu, das ist ein PITA. Nichts hat mir geholfen (ich habe "Invalidate/Restart" ausprobiert, Dateien aus ".idea/libraries" entfernt und neu gestartet). 

Der einzige Weg, das Problem zu lösen, bestand für mich darin, projektbezogene Ordner manuell aus dem IntelliJIdea-Cache zu entfernen. Ich habe diese Ordner von den folgenden Stellen entfernt (ich verwende OSX und IntelliJ-Idea 14):

  • / Benutzer/{Benutzername}/Bibliothek/Caches/IntelliJIdea14/Compiler/{Projektname}
  • / Benutzer/{Benutzername}/Bibliothek/Caches/IntelliJIdea14/Compile-Server/{Projektname}

Das hat mir geholfen, ich hoffe, es spart jemandem Zeit.

0
ialekseev

Wenn Sie den Aktivator über eine Terminal-/Shell-/Befehlseingabeaufforderung verwenden, verwenden Sie den folgenden Befehl: 

activator clean

Oder "rein" auf der sbt Shell durch intellij

Es sollte helfen, Dinge zurückzusetzen, und wenn Sie das nächste Mal ausführen oder kompilieren, sollte es von Grund auf durchlaufen werden. 

0
Saleh