Estoy tratando de inspeccionar el árbol de dependencia SBT como se describe en la documentación :
sbt inspect tree clean
Pero me sale este error:
[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á mal? ¿Por qué SBT no construye el árbol?
scala
dependencies
sbt
Cereza
fuente
fuente
Respuestas:
Cuando se ejecuta desde la línea de comando , se supone que cada argumento enviado a sbt es un comando, así
sbt inspect tree clean
que:inspect
comando,tree
comando,clean
comandoEsto obviamente falla, ya que
inspect
necesita un argumento. Esto hará lo que quieras:sbt "inspect tree clean"
fuente
inspect tree <foo>
comando trata de inspeccionar las dependencias de la tarea<foo>
en el sistema de configuración y tareas de sbt, que a veces es útil, pero completamente diferente.Si realmente desea ver las dependencias de la biblioteca (como lo haría con Maven) en lugar de las dependencias de tareas (que es lo que se
inspect tree
muestra), entonces querrá usar el complemento sbt-dependency-graph .Agregue lo siguiente a su proyecto / plugins.sbt (o el global plugins.sbt).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Entonces tienes acceso al
dependencyTree
comando y otros.fuente
sbt update
, abra los informes XMLtarget/resolution-cache/reports/
en un navegador como MSIE.addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
O eche un vistazo a github.com/jrudolph/sbt-dependency-graph para obtener la última versión e instrucciones.Si desea ver las dependencias de la biblioteca , puede usar el
coursier
complemento: https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treesEjemplo de salida: texto (sin colores): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Tenga en cuenta que el complemento tiene una naturaleza completamente diferente a la de imprimir árboles. Está diseñado para descargas de dependencias rápidas y simultáneas. Pero es bueno y se puede agregar a casi cualquier proyecto, así que creo que vale la pena mencionarlo.
fuente
Intenté usar el
"net.virtual-void" % "sbt-dependency-graph"
complemento mencionado anteriormente y obtuve 9K líneas como salida (hay muchas líneas vacías y duplicados) en comparación con ~ 180 líneas (exactamente una línea para cada dependencia en mi proyecto) como salida en la salida de Mavenmvn dependency:tree
. Así que escribí una tarea de envoltura de sbt para ese objetivo de Maven, un truco feo pero funciona:// 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".! }
fuente
mvn.cmd
lugar de solo escribirmvn
Con sbt 1.4.0, la
dependencyTree
tarea está disponible en sbt sin utilizar complementos.sbt 1.4.0: https://github.com/sbt/sbt/releases/tag/v1.4.0
fuente