sbt - 在 sbt 项目中,如何获取具有范围的完整依赖项列表?
问题描述
在 sbt 项目中,如何获取具有范围的依赖项(包括传递依赖项)的完整列表?
例如:
xxx.jar(Compile)
yyy.jar(Provided)
zzz.jar(Test)
...
解决方案
在sbt
shell 中,您可以执行以下一个或所有命令:
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 文件。
推荐阅读
- flutter - Flutter 显示 JSON 数组中的值并点击更改索引
- selenium - Azure devops 硒测试计划
- java - 如何在运行时从父类访问子类变量?
- python-3.x - pyqt5 主窗口关闭事件 - 重新检查用户是否要关闭窗口
- php - Aws Cognito php 客户端 getUser 始终为空
- azure - 通过 Azure AD B2C 中的 MS Graph API 以编程方式将“本地”IdentityProvider 切换为用户名
- flutter - 颤动TextField粘性,当我完成其他项目时光标跳回它
- c - 找到最小时钟角度的逻辑应该是什么?
- nlp - 文本相似度的分组算法
- c++ - 一般来说,使用 C++ 模板会产生比使用宏执行相同代码更大的可执行文件吗?