Comment voir l’arbre de dépendance dans sbt?

J’essaie d’inspecter l’arbre de dépendance SBT comme décrit dans la documentation :

sbt inspect tree clean 

Mais j’ai cette erreur:

 [error] inspect usage: [error] inspect [uses|tree|definitions]  Prints the value for 'key', the defining scope, delegates, related definitions, and dependencies. [error] [error] inspect [error] ^ 

Qu’est-ce qui ne va pas? Pourquoi SBT ne construit-il pas l’arbre?

Lorsqu’il est exécuté à partir de la ligne de commande , chaque argument envoyé à sbt est supposé être une commande.

  • exécuter la commande inspect ,
  • puis lancez la commande tree ,
  • alors la commande clean

Cela échoue évidemment, car inspect besoin d’un argument. Cela fera ce que vous voulez:

 sbt "inspect tree clean" 

Si vous voulez vraiment voir les dépendances de la bibliothèque (comme vous le feriez avec Maven) plutôt que les dépendances de tâches (ce qui est ce qui inspect tree ), alors vous voudrez utiliser le plug – in sbt-dependency-graph .

Ajoutez ce qui suit à votre projet / plugins.sbt (ou au plugins.sbt global).

 addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2") 

Ensuite, vous avez access à la commande dependencyTree , et à d’autres.

Si vous voulez voir les dépendances de la bibliothèque , vous pouvez utiliser le plugin coursier : https://github.com/coursier/coursier#printing-trees

Exemple de sortie: image texte (sans couleurs): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4

Notez que le plug-in a une nature complètement différente de l’impression d’arbres. Il est conçu pour les téléchargements de dépendances rapides et simultanés. Mais c’est bien et peut être ajouté à presque tous les projets, donc je pense que cela mérite d’être mentionné.

J’ai essayé d’utiliser le "net.virtual-void" % "sbt-dependency-graph" mentionné ci-dessus et j’ai obtenu 9K lignes (il y a beaucoup de lignes vides et de doublons) par rapport à 180 lignes (exactement une ligne par dépendance) dans mon projet) comme sortie dans la mvn dependency:tree de Maven mvn dependency:tree sortie de l’ mvn dependency:tree . J’ai donc écrit une tâche d’ encapsulation pour cet objective Maven, un hack moche mais ça marche:

 // You need Maven installed to run it. lazy val mavenDependencyTree = taskKey[Unit]("Prints a Maven dependency tree") mavenDependencyTree := { val scalaReleaseSuffix = "_" + scalaVersion.value.split('.').take(2).mkSsortingng(".") val pomXml =  4.0.0 groupId artifactId 1.0  { libraryDependencies.value.map(moduleId => { val suffix = moduleId.crossVersion match { case binary: sbt.librarymanagement.Binary => scalaReleaseSuffix case _ => "" }  {moduleId.organization} {moduleId.name + suffix} {moduleId.revision}  }) }   val printer = new scala.xml.PrettyPrinter(160, 2) val pomSsortingng = printer.format(pomXml) val pomPath = java.nio.file.Files.createTempFile("", ".xml").toSsortingng val pw = new java.io.PrintWriter(new File(pomPath)) pw.write(pomSsortingng) pw.close() println(s"Formed pom file: $pomPath") import sys.process._ s"mvn -f $pomPath dependency:tree".! }