首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >配置中的键:如何列出配置和键?

配置中的键:如何列出配置和键?
EN

Stack Overflow用户
提问于 2017-08-26 09:38:46
回答 1查看 651关注 0票数 4

sbt在行动中书在配置中引入了密钥的概念。

然后列出默认配置:

  • 编译
  • 测试
  • 运行时
  • IntegrationTest

Q1()是否可以从sbt会话中打印出所有配置的列表?如果没有,我能在sbt文档中找到有关配置的信息吗?

(Q2)用于特定配置的,例如“‘Compile”,是否可以从sbt会话中打印出配置的键列表?如果没有,我能在sbt文档中找到有关配置密钥的信息吗?

EN

Stack Overflow用户

回答已采纳

发布于 2017-08-29 22:15:24

所有配置的列表

为此,您可以使用如下所示的setting

代码语言:javascript
运行
复制
val allConfs = settingKey[List[String]]("Returns all configurations for the current project")

val root = (project in file("."))
  .settings(
     name := "scala-tests",
     allConfs := {
       configuration.all(ScopeFilter(inAnyProject, inAnyConfiguration)).value.toList
         .map(_.name)
     }

这显示了所有配置的名称。您可以访问map中每个配置的更多细节。

来自交互式sbt控制台的输出:

代码语言:javascript
运行
复制
> allConfs
[info] * provided
[info] * test
[info] * compile
[info] * runtime
[info] * optional

如果您只想打印它们,则可以在设置定义中使用settingKey[Unit]println

配置中所有密钥的列表

为此,我们需要一个task (可能还有其他的方法,但我还没有探索,在sbt中,我很满意如果有什么东西能起作用.)以及解析用户输入的解析器。

在这个片段中,所有用户都加入了上面的设置:

代码语言:javascript
运行
复制
import sbt._
import sbt.Keys._
import complete.DefaultParsers._

val allConfs = settingKey[List[String]]("Returns all configurations for the current project")
val allKeys = inputKey[List[String]]("Prints all keys of a given configuration")

val root = (project in file("."))
  .settings(
     name := "scala-tests",
     allConfs := {
       configuration.all(ScopeFilter(inAnyProject, inAnyConfiguration)).value.toList
         .map(_.name)
     },
     allKeys := {
       val configHints = s"One of: ${
         configuration.all(ScopeFilter(inAnyProject, inAnyConfiguration)).value.toList.mkString(" ")
       }"
       val configs = spaceDelimited(configHints).parsed.map(_.toLowerCase).toSet
       val extracted: Extracted = Project.extract(state.value)
       val l = extracted.session.original.toList
         .filter(set => set.key.scope.config.toOption.map(_.name.toLowerCase)
           .exists(configs.contains))
         .map(_.key.key.label)
       l
     }
   )

现在您可以像这样使用它:

$ sbt "allKeys compile"

如果您处于交互式模式,可以在allKeys之后按tab键查看提示符:

代码语言:javascript
运行
复制
> allKeys
One of: provided test compile runtime optional

因为allKeys是一个task,所以它的输出不会出现在sbt控制台上,如果您只是“返回”它,但是可以打印它。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45894022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档