Я пытаюсь проверить дерево зависимостей 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 не строит дерево?
scala
dependencies
sbt
вишня
источник
источник
Ответы:
При запуске из командной строки каждый аргумент, отправленный в sbt, должен быть командой, поэтому
sbt inspect tree clean
:inspect
команду,tree
команду,clean
командаЭто явно не работает, поскольку
inspect
требует аргумента. Это сделает то, что вы хотите:sbt "inspect tree clean"
источник
inspect tree <foo>
предназначена для проверки зависимостей задачи<foo>
в системе задач и настроек sbt, что иногда полезно, но совершенно другое.Если вы хотите фактически просматривать зависимости библиотеки (как в случае с Maven), а не зависимости задач (что и
inspect tree
отображается), то вы захотите использовать плагин sbt-dependency-graph .Добавьте следующее в свой проект / plugins.sbt (или в глобальный plugins.sbt).
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")
Тогда у вас есть доступ к
dependencyTree
команде и другим.источник
sbt update
откройте отчеты XMLtarget/resolution-cache/reports/
в браузере, таком как MSIE.addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
Или посмотрите последнюю версию и инструкции на github.com/jrudolph/sbt-dependency-graph .Если вы хотите просмотреть зависимости библиотеки , вы можете использовать
coursier
плагин: https://github.com/coursier/coursier/blob/master/doc/FORMER-README.md#printing-treesПример вывода: текст (без цветов): https://gist.github.com/vn971/3086309e5b005576533583915d2fdec4
Обратите внимание, что плагин имеет совершенно другую природу, чем печать деревьев. Он разработан для быстрой и одновременной загрузки зависимостей. Но он хорош и может быть добавлен практически в любой проект, поэтому я думаю, что стоит упомянуть.
источник
Я попытался использовать
"net.virtual-void" % "sbt-dependency-graph"
упомянутый выше плагин и получил 9К строк в качестве вывода (есть много пустых строк и дубликатов) по сравнению с ~ 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".! }
источник
mvn.cmd
а не только писатьmvn
С sbt 1.4.0
dependencyTree
задача доступна в sbt без использования плагинов.sbt 1.4.0: https://github.com/sbt/sbt/releases/tag/v1.4.0
источник