gpt4 book ai didi

scala - 使用 sbt 进行 token 替换(资源过滤)

转载 作者:行者123 更新时间:2023-12-01 09:55:24 26 4
gpt4 key购买 nike

我正在 SBT 中寻找与 Maven 相同的资源过滤功能,但不是现成的。

在这里和其他地方进行了大量搜索后,我发现有两个插件功能接近,但没有一个真正做到了。例如,xsbt-filter不过滤诸如 ${baseDirectory} 之类的标记,而 sbt-editsource 不与单元或集成测试一起工作(参见 issue 9)

所以,我尝试通过修改这两个插件之一来自己编写代码,但这是我在 SBT 中无法弄清楚的问题,因为我是新手(而不是 Scala 专业人士):

您如何重用 SBT build设置来进行 token 解析?

这些设置在对象 sbt.Keys 中。例如,baseDirectory 是:

val baseDirectory = SettingKey[File]("base-directory")

有几十个(也许数百个)可用于解析资源文件中的标记。

最后,为了在插件代码中进行 token 解析,您需要映射 Map[String, String] 键中存在的所有build设置,即键是“baseDirectory”,值是是编译时该值的任何值。

我假设一种方法是使用反射,但在走这条路之前,我想我问过是否有更标准的方法从 sbt 插件中执行此操作,这看起来相当基本。

到目前为止我见过的所有插件都将每个键设置(将变量名称转换为键的字符串)复制并粘贴到它们的插件代码中。


对于那些不熟悉资源过滤的人来说,这意味着构建工具应该能够解析资源文件中存在的所有标记,并在编译时将资源文件替换为它的值(示例:资源文件是“/User/me/Documents/myproject/src/test/resources/myfile.txt”,其中文本有一个字符串${target},其中“target"是键,"/User/me/Documents/myproject/target"恰好是它在特定构建中的值。

最佳答案

In the end, for doing token resolution within the plugin code, you need a map Map[String, String] of all build settings present in Keys, i.e. key is "baseDirectory" and the value is whatever at compile time that value is.

sbt 内部保留这些信息,因此您可以查询它们。例如,sbt 中有一个名为 inspect 的命令,它会告诉您设置的当前值,以及它使用的所有其他依赖项。前一段时间我写了一个插件,递归调用它并在 ASCII 艺术树中打印出来,叫做 sbt-inspectr: https://github.com/eed3si9n/sbt-inspectr .

还有 Project.runTask(...),您可能需要它。

关于scala - 使用 sbt 进行 token 替换(资源过滤),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36510188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com