web-dev-qa-db-fra.com

Comment nettoyer, re-résoudre et reconstruire entièrement un projet Scala sbt géré par IDEA?

TL; DR: Comment puis-je réconcilier pleinement toutes les dépendances dans IntelliJ lorsque le fichier SBT change

J'ai une configuration de projet SBT dans IntelliJ. La plupart du temps, si cela fonctionne comme un charme, mais c'est très pénible pour moi de changer la version des dépendances et des compilateurs.

Ce que j’espère faire, c’est de mettre à jour mon fichier SBT et de cliquer sur quelque chose comme clean project dans IntelliJ, afin qu’il soit à jour.

Le meilleur élément de menu que j'ai trouvé est Rebuild project. Il lit les nouvelles dépendances, mais conserve les anciennes. Les bibliothèques externes contiennent donc plusieurs versions des bibliothèques d'exécution et des bibliothèques tierces de Scala.

Pour résoudre ce problème, je peux fermer IntelliJ et supprimer tous les fichiers dans .idea/libraries. Lorsque je redémarre IntelliJ, il résoudra les dépendances. Cela fonctionne, mais la suppression manuelle des fichiers de métadonnées indique que je fais la mauvaise chose.

38
Tobber

Pour actualiser IntelliJ après les modifications apportées aux fichiers * .sbt:

  • Ouvrez le volet Projet SBT (Affichage du menu/Fenêtres d’outil/SBT).
  • Faites un clic droit sur votre projet SBT
  • Sélectionnez Actualiser le projet externe

 enter image description here

9
Polymerase

Lorsque vous enregistrez le fichier SBT, IntelliJ IDEA actualise normalement le projet. Mais si ce n'est pas le cas, vous pouvez le faire manuellement.

Il existe un bouton Actualiser tous les projets SBT dans le panneau SBT:

 enter image description here  enter image description here

À la occasion où IDEA est toujours confus, ne trouvant pas les paquets que vous venez d'ajouter:

Dans le menu Fichier:

 Invalidate Cache ScreenShot

C'est un très gros marteau, qui nécessite un redémarrage de l'application et une reconstruction de l'index IntelliSense en plusieurs minutes. Mais c’est parfois la seule chose qui obligera IDEA à reconnaître vos nouveaux packages SBT.

7
Brent Faust

M'est arrivé auparavant, et oui, est un PITA. 

En général, je supprime manuellement les dépendances du projet, puis laisse sbt réimporter ce qui est réellement nécessaire. Ne le faites pas sur l'interface utilisateur cependant, car même en ayant une sélection multiple, vous demanderez une confirmation pour CHAQUE dépendance! (vous cliquerez sur "Oui, j'en suis sûr" pendant une heure), allez plutôt supprimer directement du fichier de projet .iml de votre répertoire .idea/modules.

4
Daniel Langdon

essayez les étapes suivantes:

  1. fermer IntelliJ
  2. sauvegarder tout le dossier du projet
  3. supprimer le dossier .idea
  4. supprimer le dossier cible
  5. supprimer le dossier projet/cible
  6. rouvrir IntelliJ et importer en tant que projet sbt

Notez que ceci est uniquement pour les projets SBT

2
Max

Un autre marteau lourd mais semble fonctionner.

  1. Fermer IntelliJ
  2. Supprimer le dossier .idea
  3. Importer une application à partir de sources existantes
1
cevaris

J'utilisais différentes versions de sbt et scala sur différents projets et IntelJi s'est quelque peu embrouillé. Je ne peux résoudre le problème qu'en supprimant les dossiers de cache sbt et ivy2

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

Ce qui a fonctionné pour moi a été de:

1) Fermer IntelliJ

2) supprimer .idea/libraries internes

3) Démarrer IntelliJ

4) clic droit pom.xml Maven > Reimport

Après cela, il n'y avait plus d'anciennes versions et de bibliothèques en double dans les bibliothèques externes.

0

IDÉE 2016.2.4

Aucune de ces solutions n'a fonctionné pour moi.

**** AVANT D'ESSAYER L'UN DES DESSUS. FAITES UNE SAUVEGARDE DU SBT/IDEA PROJET EN QUESTION *****

Si j'ai mis à jour le fichier 'build.sbt', les dépendances de la bibliothèque externe sur la vue du projet ne se sont pas mises à jour. De plus, la structure du projet affichait toujours les anciennes dépendances. Peu importe ce que j'ai essayé, IDEA ne s'actualise pas.

Le seul moyen d'obtenir une restauration partielle était de copier le dossier '.idea' à partir d'un autre ordinateur. L'implémentation du plugin SBT est **** ed! J'ai préalablement supprimé le dossier '.idea/libraries', puis IDEA n'a pas restauré ce dossier. J'ai essayé à plusieurs reprises d'importer le projet à nouveau.

Très mauvais :(

ADDENDA: J'ai réussi à faire fonctionner mon projet. Je pense que SBT avec IDEA n'est plus entièrement fautif. Il est possible que mon cache Apache Ivy 2 ait été corrompu. J'ai donc exécuté les commandes suivantes:

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

IDEA redémarré avec invalidation du cache sous l'élément de menu déroulant Fichier. Cela semblait déclencher une action interne dans IDEA et SBT. J'ai aussi essayé d'ajouter manuellement des JARs supplémentaires à travers l'IDE, mais cela a été confus. La morale de l’histoire est de travailler quotidiennement sur deux ordinateurs portables différents et de les tenir à jour.

Vérifiez également que SBT à partir de la ligne de commande fonctionne. J'utilisais 0.13.12

$ sbt about
$ sbt clean
$ sbt test

Revérifier également avec le plugin de dépendances SBT aussi.

0
peter_pilgrim

D'accord, c'est un PITA. Rien ne m'a aidé (j'ai essayé "Invalidate/Restart", en supprimant les fichiers de ".idea/libraries" et en les redémarrant). 

Pour moi, le seul moyen de surmonter ce problème était de supprimer manuellement les dossiers liés au projet du cache IntelliJIdea. J'ai supprimé ces dossiers des emplacements suivants (j'utilise OSX et IntelliJ-Idea 14):

  • / Users/{Nom d'utilisateur}/Library/Caches/IntelliJIdea14/compiler/{NomProjet}
  • / Users/{UserName}/Library/Caches/IntelliJIdea14/serveur de compilation/{ProjectName}

Cela m'a aidé, j'espère que cela fera gagner du temps à quelqu'un.

0
ialekseev

Si vous utilisez l'activateur via une invite de terminal/Shell /, utilisez la commande suivante: 

activator clean

Ou simplement "propre" sur le sbt Shell via intellij

Cela devrait aider à réinitialiser les choses et la prochaine fois que vous exécuterez ou compilerez, il devrait tout recommencer. 

0
Saleh