【问题标题】:In a sbt project, how to get full list of dependencies with scope?在 sbt 项目中,如何获取具有范围的依赖项的完整列表?
【发布时间】:2021-10-23 10:33:16
【问题描述】:

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

例如:

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

【问题讨论】:

    标签: sbt


    【解决方案1】:

    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 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多