在 sbt 项目中,如何获取范围内的依赖项的完整列表?

In a sbt project, how to get full list of dependencies with scope?

在 sbt 项目中,如何获取带有范围的依赖项(包括传递依赖项)的完整列表?

例如:

xxx.jar(Compile)
yyy.jar(Provided)
zzz.jar(Test)
...

sbt shell 您可以执行以下一个或所有命令:

    Test / fullClasspath
    Runtime / fullClasspath
    Compile / fullClasspath

这将输出与范围关联的 jar (Test/Runtime/Compile)。

如果您想更花哨一些,sbt 提供了多种与依赖管理系统生成的输出进行交互的方法。文档是 here.

例如,您可以将此添加到您的 build.sbt 文件中:


lazy val printReport = taskKey[Unit]("Report which jars are in each scope.")
printReport := {
  val updateReport: UpdateReport = update.value
  val jarFilter: ArtifactFilter = artifactFilter(`type` = "jar")
  val testFilter = configurationFilter(name = "test")
  val compileFilter = configurationFilter(name = "compile")

  val testJars = updateReport.matching(jarFilter && testFilter)
  val compileJars = updateReport.matching(jarFilter && compileFilter)

  println("Test jars:\n===")
  for (jar <- testJars.sorted) yield {println(jar.getName)}

  println("\n\n******\n\n")

  println("compile jars:\n===")
  for (jar <- compileJars.sorted) yield {println(jar.getName)}
}

它创建了一个新任务 printReport,它可以像使用 sbt printReport 的普通 sbt 命令一样执行。它获取由 update 任务生成的 UpdateReport 的值,然后在打印结果之前在各自的 test/compile 范围内过滤 jar 文件。