webentwicklung-frage-antwort-db.com.de

SBT auf IntelliJ benötigt eine sehr lange Aktualisierung

Ich habe ein ziemlich großes Projekt (15+ Unterprojekte), das viele externe Abhängigkeiten hat. Wenn ich in build.sbt sogar eine einzelne Zeile ändere und dann auf Aktualisieren klicke, löst IntelliJ noch sehr lange verschiedene Abhängigkeiten auf (30+ Minuten). 

Soll es so langsam sein? Die Verwendung von sbt über die Befehlszeile dauert nicht länger als 30 Sekunden.

Ich benutze -

Macbook pro mid 2015 with 16 GB ram
IntelliJ IDEA Ultimate 2017.2.5
sbt 0.13.13 
scala 2.11.11
10
Kakaji

Ich habe SBT Shell in IntelliJ aktiviert, wie von @ y.bedrov vorgeschlagen, und jetzt ist die Aktualisierung genauso schnell wie die Befehlszeile! 

Voreinstellungen> Erstellen, Ausführen, Bereitstellen> Erstellungstools> SBT> Aktivieren Sie "SBT-Shell für Build und Import verwenden".

3
Kakaji

Eine Sache kann helfen, die Auflösung von Abhängigkeiten zwischengespeichert zu haben, die ab sbt 0.13.7 verfügbar ist. Schauen Sie hier: http://www.scala-sbt.org/1.0/docs/Cached-Resolution.html , aber grundsätzlich müssen Sie die folgende Einstellung für alle Projekte in Ihrem Build aktivieren:

updateOptions := updateOptions.value.withCachedResolution(true)

Mit dieser Einstellung konnte ich die Aktualisierungszeit für das IntelliJ-Projekt von 15 Minuten auf 3 Minuten reduzieren. Immer noch nicht ideal, aber viel überschaubarer. 

Es gibt einige Vorbehalte, da es sich um eine experimentelle Umgebung handelt, die auf dieser Seite beschrieben wird. Wenn Sie SNAPSHOT-Abhängigkeiten haben, wird dies nur die Situation verschlimmern, wenn Sie dies aktivieren.

6
Haspemulator

Die Antworten von Kakaji und Haspemulator halfen mir, den Import bei einem ~ 40-Projektaufbau auf ~ 3 Minuten zu reduzieren. Darüber hinaus fand ich heraus, dass die meiste Zeit im IntelliJ-SBT-Import das Abrufen der Abhängigkeiten von Ivy als Teil des Befehls updateClassifiers ausgegeben wurde.

Dies geschieht jedes Mal, wenn Sie den Import durchführen, wenn Sie das Kontrollkästchen "Bibliotheksquellen" aktiviert haben, wenn Sie das Projekt importieren. Ich würde erwarten, dass es langsamer ist, wenn Sie auch 'sbt sources' überprüfen, da dies mehr Bibliotheken zum Auflösen bedeutet.

Eine Möglichkeit, updateClassifiers zu beschleunigen, ist die Verwendung von coursier für die Abhängigkeitsauflösung. Ich habe gerade die folgende Zeile zu project/plugins.sbt hinzugefügt und importiert sie jetzt in ~ 1 Minute.

addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.1")

Sie können mehr darüber erfahren, wie updateClassifiers langsam ist unter https://github.com/sbt/sbt/issues/1930

5
fedeoasi

Ich verwende die Kombination der obigen 2 ( - Voreinstellungen> Erstellen, Ausführen, Bereitstellen> Erstellen von Tools> SBT> Aktivieren Sie "SBT-Shell für Build und Import verwenden" - coursier

mit der folgenden globalen build.sbt: 

    // file: ~/.sbt/0.13/plugins/build.sbt
    // purpose: add jar utils useful for development, but not wanted to projects' build.sbt

    // much better depts resolvement and fetching
    // usage: sbt update
    // https://github.com/coursier/coursier#why
    resolvers += Resolver.sonatypeRepo("snapshots")
    addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.1.0-SNAPSHOT")


    // enable this one if you want to use the local artifacts in your local repo's
    // ~/.ivy2/local/
    // ~/.ivy2/cache/
    // instead of the remote ones
    // updateOptions := updateOptions.value.withLatestSnapshots(false)


    resolvers ++= Seq(
       "typesafe" at "https://dl.bintray.com/typesafe/ivy-releases/",
       "Maven External Releases" at "https://artifactory-espoo1.ext.net.nokia.com/artifactory/public-maven-remotes/"
    )


    // eof file: ~/.sbt/0.13/plugins/build.sbt
1
Yordan Georgiev