Scala 如何在sbt中查看依赖关系树?

Scala 如何在sbt中查看依赖关系树?,scala,dependencies,sbt,Scala,Dependencies,Sbt,我正在尝试检查SBT依赖关系树,如中所述: 但我得到了这个错误: [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依赖关系树,如中所述:

但我得到了这个错误:

[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为什么不构建树?

从命令行运行时,发送给SBT的每个参数都应该是一个命令,因此
SBT inspect tree clean
将:

  • 运行
    inspect
    命令
  • 然后运行
    命令
  • 然后执行
    clean
    命令
这显然是失败的,因为
inspect
需要一个参数。这将满足您的要求:

sbt "inspect tree clean"

如果您想实际查看库依赖项(与Maven一样),而不是任务依赖项(这是
inspect tree
显示的内容),那么您需要使用插件

将以下内容添加到您的项目/plugins.sbt(或全局plugins.sbt)


然后您可以访问
dependencyTree
命令和其他命令。

如果您想查看库依赖项,可以使用
coursier
插件:

输出示例: 文本(不带颜色):

请注意,该插件的性质与打印树完全不同。它是为快速和并发的依赖下载而设计的。但是它很好,几乎可以添加到任何项目中,所以我认为它值得一提。

我尝试使用上面提到的
“net.virtual void”%“sbt dependency graph”
插件,得到9K行作为输出(有许多空行和重复行),而不是大约180行(我的项目中每个依赖项正好有一行)作为Maven的
mvn依赖关系:树中的输出。因此,我为Maven的目标编写了一个sbt包装,这是一个丑陋的破解,但它是有效的:

//需要安装Maven才能运行它。
lazy val mavenDependencyTree=taskKey[Unit](“打印Maven依赖关系树”)
mavenDependencyTree:={
val scalaReleaseSuffix=“”+scalaVersion.value.split('.')。take(2.mkString('.'))
val-pomXml=
4.0.0
groupId
人工的
1
{
libraryDependencies.value.map(moduleId=>{
val后缀=moduleId.crossVersion匹配{
case binary:sbt.librarymanagement.binary=>scalareleasuffix
大小写=>“”
}
{moduleId.organization}
{moduleId.name+后缀}
{moduleId.revision}
})
}
val printer=new scala.xml.PrettyPrinter(160,2)
val pomString=printer.format(pomXml)
val-pomPath=java.nio.file.Files.createTempFile(“,”.xml”).toString
val pw=newjava.io.PrintWriter(新文件(pomPath))
pw.write(pomString)
关闭
println(s“形成的pom文件:$pomPath”)
导入系统进程_
s“mvn-f$pomPath依赖项:树”。!
}

对于sbt 1.4.0,sbt中可以使用
dependencyTree
任务,而无需使用插件

sbt依赖树


sbt 1.4.0:

它显示了哪些库依赖关系??我不这么认为。它对我有用,首先,我移动到sbt控制台并运行inspect tree clean命令。我得到了一个大的依赖树。我试过这个,它给出了一些东西树。但我没有对任何外部库进行罚款。ie我在输出中搜索Akka,我没有在控制台中显示任何Akka的出现。它显示了一些无用的树。它包含所有关于我的本地和依赖模块和详细信息。这个命令没有用。“请帮我任何比这更荒谬的命令。”Sun:关于如何获取maven/ivy库依赖项,请参阅第二个答案,这正是您要寻找的。
inspect tree
命令用于检查sbt的任务和设置系统中任务的依赖关系
,该命令有时有用,但完全不同。它打印类似于树的内容。不应该是图书馆依赖信息的公认答案,还有Ivy生成的详细依赖报告。执行
sbt update
后,在类似MSIE的浏览器中打开
target/resolution cache/reports/
中的XML报告。如果不引入库,怎么办?我开始想念maven:(@Jas甚至maven都是通过一个插件来实现的,只是maven抓住了这个插件(org.apache.maven.plugins:maven dependency plugin)运行依赖项时自动执行以下操作:tree@DavidRabinowitz从技术上讲,它并没有回答这个问题,但大多数发现这个问题的人实际上有一个不同的问题。对于sbt 1.0及更高版本,您需要使用此版本:
addSbtPlugin(“net.virtual void”%”sbt依赖关系图“%”0.10.0-RC1)
或查看最新版本和说明。@mjjanice谢谢!我现在就用它。当它更改时,希望网站会有一个合适的/稳定的条目。您的代码非常有用,顺便说一句,如果有人试图在windows上运行它,请不要忘了编写
mvn.cmd
I的绝对路径n不要只写
mvn
查看来自for sbt>1.4Thanks的最新答案!因为sbt 1.4,这是正确的答案。所有其他答案或多或少都过时了。(因此应该提供一种方法将答案标记为过时或类似的东西…)根据输出,它似乎依赖于JDK 11
[info]欢迎来到sbt 1.4.0(Red Hat,Inc.Java 11.0.9)
。这不是坏事,但要记住这一点很好。他们没有在sbt中包含所有注释,这非常令人恼火,尽管我希望能够运行
dependencyBrowseTree
,但似乎必须添加整个插件才能做到这一点。
sbt "inspect tree clean"
addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.9.2")