【发布时间】:2021-10-23 10:33:16
【问题描述】:
在一个 sbt 项目中,如何获取具有范围的依赖项(包括传递依赖项)的完整列表?
例如:
xxx.jar(Compile)
yyy.jar(Provided)
zzz.jar(Test)
...
【问题讨论】:
标签: sbt
在一个 sbt 项目中,如何获取具有范围的依赖项(包括传递依赖项)的完整列表?
例如:
xxx.jar(Compile)
yyy.jar(Provided)
zzz.jar(Test)
...
【问题讨论】:
标签: sbt
从sbt shell,您可以执行以下一个或所有命令:
Test / fullClasspath
Runtime / fullClasspath
Compile / fullClasspath
这将输出与范围(测试/运行时/编译)关联的 jar。
如果您想更花哨一点,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 命令和sbt printReport 一样执行。它获取由update 任务生成的UpdateReport 的值,然后在打印结果之前过滤各个测试/编译范围内的jar 文件。
【讨论】: