【发布时间】:2016-04-08 22:16:38
【问题描述】:
我正在 SBT 中寻找与 Maven 具有相同的资源过滤功能,但不是开箱即用的。
在这里和其他地方进行了相当多的搜索后,我发现了两个功能接近的插件,但都没有真正做到。例如,xsbt-filter 不会过滤诸如${baseDirectory} 之类的标记,而 sbt-editsource 不能与单元测试或集成测试结合使用(请参阅issue 9)
所以,我尝试通过修改这两个插件之一来自己编写代码,但这是我在 SBT 中无法解决的问题,因为是新手(而不是 Scala 专业人士):
您如何重用 SBT 构建设置来进行令牌解析?
这些设置在对象 sbt.Keys 中。例如,baseDirectory 是:
val baseDirectory = SettingKey[File]("base-directory")
有几十个(可能数百个)可用于解析资源文件中的令牌。
最后,为了在插件代码中进行令牌解析,您需要一个映射 Map[String, String] 存在于 Keys 中的所有构建设置,即 key 是“baseDirectory”,值是编译时的任何值。
我认为一种方法是使用反射,但在走这条路之前,我想我问是否有一个更标准的方法可以从 sbt 插件中做到这一点,这似乎相当基本。
到目前为止,我看到的所有插件都将每个键设置(将变量名转换为键的字符串)复制并粘贴到它们的插件代码中。
对于那些不熟悉资源过滤的人来说,这意味着构建工具应该能够解析资源文件中存在的所有令牌,并在编译时将令牌键替换为它的值后将资源文件放在目标下(例如:资源文件是“/User/me/Documents/myproject/src/test/resources/myfile.txt”,其中文本有一个字符串${target},其中“target”是键,而“/User/me/Documents/myproject/target”恰好是它在特定构建中的值)。
【问题讨论】: