Próbuję sprawdzić drzewo zależności SBT zgodnie z opisem w dokumentacji :
sbt inspect tree clean
Ale pojawia się ten błąd:
[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] ^
Co jest nie tak? Dlaczego SBT nie buduje drzewa?
scala
dependencies
sbt
wiśnia
źródło
źródło
Odpowiedzi:
Po uruchomieniu z wiersza poleceń , każdy argument wysłany do sbt powinien być poleceniem, więc
sbt inspect tree clean
:inspect
polecenie,tree
polecenie,clean
polecenieTo oczywiście zawodzi, ponieważ
inspect
wymaga argumentu. To zrobi, co chcesz:sbt "inspect tree clean"
źródło
inspect tree <foo>
Komenda jest o kontroli zależności związane z zadaniem<foo>
w zadania i ustawień systemu SBT, która jest czasami przydatne, ale zupełnie inaczej.Jeśli chcesz faktycznie wyświetlić zależności bibliotek (tak jak w przypadku Mavena), a nie zależności zadań (które są
inspect tree
wyświetlane), będziesz chciał użyć wtyczki sbt-dependency-graph .Dodaj następujące elementy do swojego projektu / plugins.sbt (lub globalnego pliku plugins.sbt).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Wtedy masz dostęp do
dependencyTree
polecenia i innych.źródło
sbt update
otwórz raporty XMLtarget/resolution-cache/reports/
w przeglądarce, takiej jak MSIE.addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
Lub zajrzyj na github.com/jrudolph/sbt-dependency-graph, aby uzyskać najnowszą wersję i instrukcje.Jeśli chcesz zobaczyć zależności bibliotek , możesz użyć
coursier
wtyczki: https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treesPrzykład danych wyjściowych: tekst (bez kolorów): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Zauważ, że wtyczka ma zupełnie inny charakter niż drukowanie drzew. Jest przeznaczony do szybkiego i równoczesnego pobierania zależności. Ale jest fajny i można go dodać do prawie każdego projektu, więc myślę, że warto o tym wspomnieć.
źródło
Próbowałem użyć
"net.virtual-void" % "sbt-dependency-graph"
wspomnianej powyżej wtyczki i otrzymałem 9K linii jako wyjście (jest wiele pustych linii i duplikatów) w porównaniu do ~ 180 linii (dokładnie jedna linia na każdą zależność w moim projekcie) jako wynik wyjściowy Mavenamvn dependency:tree
. Więc napisałem zadanie opakowujące sbt dla tego celu Maven, brzydki hack, ale działa:// 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".! }
źródło
mvn.cmd
zamiast tylko pisaćmvn
W sbt 1.4.0
dependencyTree
zadanie jest dostępne w sbt bez użycia wtyczek.sbt 1.4.0: https://github.com/sbt/sbt/releases/tag/v1.4.0
źródło