Как увидеть дерево зависимостей в sbt?
Я пытаюсь проверить дерево зависимостей SBT, как описано в документация:
sbt inspect tree clean
но я получаю эту ошибку:
[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] ^
что не так? Почему SBT не строит дерево?
4 ответа:
при запуске из командной строки, каждый аргумент, отправленный в sbt, должен быть командой, поэтому
sbt inspect tree clean
will:
- запустить ,
- запустить ,
- тут
clean
командаэто явно не удается, так как
inspect
нужен аргумент. Это будет делать то, что вы хотите:sbt "inspect tree clean"
Если вы хотите на самом деле просматривать зависимости библиотеки (как это было бы с Maven), а не зависимости задач (что такое
inspect tree
отображает), то вы хотите использовать sbt-dependency-graph плагин.добавьте следующее в свой проект / Плагины.sbt (или глобальные Плагины.СБТ).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.8.2")
затем у вас есть доступ к и другие.
Если вы хотите посмотреть зависимостей библиотеки можно использовать
coursier
плагин:https://github.com/coursier/coursier#printing-treesпример вывода : текст (без цветов):https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
обратите внимание, что плагин имеет совершенно другую природу, чем печать деревья. Он предназначен для быстрой и одновременной загрузки зависимостей. Но это приятно и может быть добавлен практически в любой проект, поэтому я думаю, что это стоит упомянуть.
Я пробовал использовать
"net.virtual-void" % "sbt-dependency-graph"
плагин, упомянутый выше, и получил 9k строк в качестве вывода(есть много пустых строк и дубликатов) по сравнению с ~180 строками(ровно одна строка для каждой зависимости в моем проекте) в качестве вывода в Mavenmvn dependency:tree
выход. Поэтому я написал обертку sbt задание для этой цели Maven, уродливый хак, но он работает:// 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".! }