Estou tentando inspecionar a árvore de dependência do SBT conforme descrito na documentação :
sbt inspect tree clean
Mas recebo este erro:
[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] ^
O que está errado? Por que o SBT não constrói a árvore?
scala
dependencies
sbt
cereja
fonte
fonte
Respostas:
Quando executado a partir da linha de comando , cada argumento enviado para sbt deve ser um comando, então
sbt inspect tree clean
:inspect
comando,tree
comando,clean
comandoIsso obviamente falha, pois
inspect
precisa de um argumento. Isso fará o que você quiser:sbt "inspect tree clean"
fonte
inspect tree <foo>
comando é para inspecionar as dependências da tarefa<foo>
no sistema de configuração e tarefas do sbt, que às vezes é útil, mas completamente diferente.Se você deseja realmente ver as dependências da biblioteca (como faria com o Maven) em vez das dependências da tarefa (que é o que
inspect tree
exibe), então você vai querer usar o gráfico sbt-dependency plugin .Adicione o seguinte ao seu project / plugins.sbt (ou o plugins.sbt global).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Então você tem acesso ao
dependencyTree
comando e outros.fonte
sbt update
, abra os relatórios XMLtarget/resolution-cache/reports/
em um navegador como o MSIE.addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
Ou dê uma olhada em github.com/jrudolph/sbt-dependency-graph para a última versão e instruções.Se quiser ver as dependências da biblioteca , você pode usar o
coursier
plugin: https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treesExemplo de saída: texto (sem cores): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Observe que o plugin tem uma natureza completamente diferente da impressão de árvores. Ele foi projetado para downloads de dependência rápidos e simultâneos. Mas é bom e pode ser adicionado a quase qualquer projeto, então acho que vale a pena mencionar.
fonte
Com o sbt 1.4.0, o
dependencyTree
task está disponível no sbt sem usar plug-ins.sbt 1.4.0: https://github.com/sbt/sbt/releases/tag/v1.4.0
fonte
Tentei usar o
"net.virtual-void" % "sbt-dependency-graph"
plugin mencionado acima e obtive 9 mil linhas como saída (há muitas linhas vazias e duplicatas) em comparação com ~ 180 linhas (exatamente uma linha para cada dependência em meu projeto) como saída na saída do Mavenmvn dependency:tree
. Então, escrevi uma tarefa de wrapper sbt para esse objetivo do Maven, um hack feio, mas 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".! }
fonte
mvn.cmd
vez de apenas escrevermvn