J'essaie d'inspecter l'arbre de dépendance SBT comme décrit dans la documentation :
sbt inspect tree clean
Mais je reçois cette erreur:
[error] inspect usage:
[error] inspect [uses|tree|definitions] <key> 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é depuis la ligne de commande, chaque argument envoyé à sbt est censé être une commande, donc sbt inspect tree clean
volonté:
inspect
,tree
,clean
Cela échoue évidemment, puisque inspect
nécessite un argument. Cela fera ce que vous voulez:
sbt "inspect tree clean"
Si vous voulez réellement visualiser les dépendances de la bibliothèque (comme vous le feriez avec Maven) plutôt que les dépendances de la tâche (qui est ce que inspect tree
s'affiche), vous devrez alors utiliser le plugin sbt-dependency-graph .
Ajoutez les éléments suivants à votre projet/plugins.sbt (ou au plugins.sbt global).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Vous avez ensuite accès à la commande dependencyTree
et à d’autres.
Si vous souhaitez afficher les dépendances de la bibliothèque , vous pouvez utiliser le plug-in coursier
: https://github.com/ coursier/coursier/blob/master/doc/FORMER-README.md # arbre-d'impression
Exemple de sortie: texte (sans couleurs): https://Gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Notez que le plugin a une nature complètement différente de celle de l’impression d’arbres. Il est conçu pour des téléchargements de dépendance rapides et simultanés. Mais c'est agréable et peut être ajouté à presque tous les projets, alors je pense que cela vaut la peine d'être mentionné.
J'ai essayé d'utiliser le plug-in "net.virtual-void" % "sbt-dependency-graph"
Mentionné ci-dessus et j'ai obtenu 9 lignes comme sortie (il y a beaucoup de lignes vides et de doublons) par rapport à environ 180 lignes (exactement une ligne pour chaque dépendance dans mon projet) comme sortie dans Maven. mvn dependency:tree
Sortie. J'ai donc écrit un wrapper sbt tâche pour cet objectif Maven, un bidouillage moche mais qui fonctionne:
// 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).mkString(".")
val pomXml =
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>groupId</groupId>
<artifactId>artifactId</artifactId>
<version>1.0</version>
<dependencies>
{
libraryDependencies.value.map(moduleId => {
val suffix = moduleId.crossVersion match {
case binary: sbt.librarymanagement.Binary => scalaReleaseSuffix
case _ => ""
}
<dependency>
<groupId>{moduleId.organization}</groupId>
<artifactId>{moduleId.name + suffix}</artifactId>
<version>{moduleId.revision}</version>
</dependency>
})
}
</dependencies>
</project>
val printer = new scala.xml.PrettyPrinter(160, 2)
val pomString = printer.format(pomXml)
val pomPath = Java.nio.file.Files.createTempFile("", ".xml").toString
val pw = new Java.io.PrintWriter(new File(pomPath))
pw.write(pomString)
pw.close()
println(s"Formed pom file: $pomPath")
import sys.process._
s"mvn -f $pomPath dependency:tree".!
}