J'essaie d'inspecter l'arborescence de dépendances SBT comme décrit dans la documentation :
sbt inspect tree clean
Mais j'obtiens 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?
scala
dependencies
sbt
Cerise
la source
la source
Réponses:
Lorsqu'il est exécuté à partir de la ligne de commande , chaque argument envoyé à sbt est censé être une commande, de même
sbt inspect tree clean
:inspect
commande,tree
commande,clean
commandeCela échoue évidemment, car il
inspect
faut un argument. Cela fera ce que vous voulez:sbt "inspect tree clean"
la source
inspect tree <foo>
commande consiste à inspecter les dépendances de la tâche<foo>
dans le système de tâches et de paramètres de sbt, ce qui est parfois utile, mais complètement différent.Si vous voulez réellement afficher les dépendances de la bibliothèque (comme vous le feriez avec Maven) plutôt que les dépendances de la tâche (ce qui
inspect tree
s'affiche), alors vous voudrez utiliser le graphe de dépendance sbt plugin .Ajoutez ce qui suit à votre projet / plugins.sbt (ou au global plugins.sbt).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Ensuite, vous avez accès à la
dependencyTree
commande, et à d'autres.la source
sbt update
, ouvrez les rapports XMLtarget/resolution-cache/reports/
dans un navigateur tel que MSIE.addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
ou jetez un œil à github.com/jrudolph/sbt-dependency-graph pour la dernière version et les instructions.Si vous souhaitez afficher les dépendances de la bibliothèque , vous pouvez utiliser le
coursier
plugin: https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treesExemple de sortie: texte (sans couleurs): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Notez que le plugin a une nature complètement différente de l'impression d'arbres. Il est conçu pour des 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 vaut la peine d'être mentionné.
la source
J'ai essayé d'utiliser le
"net.virtual-void" % "sbt-dependency-graph"
plugin mentionné ci-dessus et j'ai obtenu 9K lignes comme sortie (il y a beaucoup de lignes vides et de doublons) par rapport à ~ 180 lignes (exactement une ligne pour chaque dépendance dans mon projet) comme sortie dans la sortie de Mavenmvn dependency:tree
. J'ai donc écrit une tâche wrapper sbt pour cet objectif Maven, un hack laid mais cela 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".! }
la source
mvn.cmd
au lieu d'écrire uniquementmvn
Avec sbt 1.4.0, la
dependencyTree
tâche est disponible dans sbt sans utiliser de plugins.sbt 1.4.0: https://github.com/sbt/sbt/releases/tag/v1.4.0
la source