首页 > 解决方案 > 在 sbt 项目中,如何获取具有范围的完整依赖项列表?

问题描述

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

例如:

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

标签: sbt

解决方案


sbtshell 中,您可以执行以下一个或所有命令:

    Test / fullClasspath
    Runtime / fullClasspath
    Compile / fullClasspath

它将输出与范围(测试/运行时/编译)关联的 jar。

如果您想更花哨一点,请sbt提供多种方式与通过依赖管理系统生成的输出进行交互。文档在这里

例如,您可以将其添加到您的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命令一样使用sbt printReport. 它获取任务UpdateReport生成的值update,然后在打印结果之前过滤相应测试/编译范围内的 jar 文件。


推荐阅读