web-dev-qa-db-fra.com

SBT sur IntelliJ prend beaucoup de temps à rafraîchir

J'ai un projet assez volumineux (plus de 15 sous-projets) comportant de nombreuses dépendances externes. Lorsque je modifie même une seule ligne dans build.sbt et que je clique sur actualiser, IntelliJ continue de résoudre diverses dépendances pendant très longtemps (plus de 30 minutes). 

Est-ce censé être aussi lent? L'utilisation de sbt à partir de la ligne de commande ne prend pas plus de 30 secondes.

J'utilise -

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

J'ai activé SBT Shell dans IntelliJ comme suggéré par @ y.bedrov et maintenant, l'actualisation est aussi rapide que la ligne de commande! 

Préférences> Construire, Exécution, Déploiement> Outils de compilation> SBT> cochez la case "Utiliser le shell SBT pour générer et importer".

3
Kakaji

La résolution des dépendances en cache, qui est un paramètre disponible à partir de sbt 0.13.7, peut être utile. Jetez un œil ici: http://www.scala-sbt.org/1.0/docs/Cached-Resolution.html , mais vous devez activer le paramètre suivant pour tous les projets de votre construction:

updateOptions := updateOptions.value.withCachedResolution(true)

Ce réglage m'a permis de réduire le temps d'actualisation du projet IntelliJ de 15 minutes à 3 minutes. Toujours pas idéal, mais beaucoup plus gérable. 

Il y a certaines mises en garde, puisqu'il s'agit d'un cadre expérimental, elles sont décrites dans cette page. En gros, si vous avez des dépendances SNAPSHOT, cela ne fera qu'empirer les choses, alors prenez-en conscience.

6
Haspemulator

Les réponses de Kakaji et de Haspemulator m'ont aidé à réduire l'importation à environ 3 minutes sur un build de projet d'environ 40. En plus de cela, j'ai découvert que la plupart du temps, lors de l'importation IntelliJ SBT, il fallait chercher les dépendances d'Ivy dans le cadre de la commande updateClassifiers.

Cela se produit chaque fois que vous effectuez l'importation si la case à cocher "Sources de la bibliothèque" est activée lors de l'importation du projet. Je m'attendrais à ce que ce soit plus lent si vous vérifiez également les «sources sbt» car cela signifie plus de bibliothèques à résoudre.

Une façon d’accélérer updateClassifiers consiste à utiliser coursier pour la résolution des dépendances. Je viens d'ajouter la ligne suivante à project/plugins.sbt et maintenant, elle importe en 1 minute environ.

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

Pour en savoir plus sur la lenteur de updateClassifiers, consultez https://github.com/sbt/sbt/issues/1930

5
fedeoasi

J'utilise la combinaison des 2 ci-dessus ( - Préférences> Construire, Exécution, Déploiement> Outils de compilation> SBT> cochez la case "Utiliser le shell SBT pour construire et importer" - coursier

avec le build.sbt global suivant: 

    // 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