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
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".
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.
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
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