我正在努力扩展Jan Berkel针对SBT的Android插件。
现在,我想知道,如何将sbt.SettingKey[sbt.package.File]
转换为java.io.File
?有没有办法从java.io.File
中提取sbt.SettingKey[sbt.package.File]
?
例如:
我有一个功能:
def isUpToDate(input: java.io.File): Boolean
期望java.io.File
作为参数。
我有一个sbt.SettingKey[sbt.package.File]
(名为myFileKey
),它映射到我需要的File
。
如何使用映射到isUpToDate
的文件调用myFileKey
?
答案 0 :(得分:1)
您需要使用<<=
撰写依赖项,使用设置密钥的apply
方法解压缩文件。 E.g。
yourKey <<= fileKey { file => ... }
是
的缩写yourKey <<= fileKey.apply { file => ... }
中的“根据其他键计算值”部分
另请注意,sbt.File
仅是java.io.File
的类型别名。
例如,映射一些文件:
val yourKey = SettingKey[File]("yourKey", "Description")
val settings = Seq[Setting[_]](
// ....
yourKey <<= fileKey { f => f / "subdirectory" }
)
答案 1 :(得分:1)
关于更新的问题。我仍然假设您正在修改现有的sbt插件。因此,您仍需要引入依赖关系。设置密钥的值仅在构建过程的特定阶段处变为有效。因此,要检索该值,您需要依赖设置键。
请阅读.sbt Build Definition document中的“任务键”部分,以决定是否需要依赖普通设置键(静态)或其他任务(动态)的结果。它看起来好像你的isUpToDate
可能需要一遍又一遍地重新评估。因此,您需要一项任务。
val isUpToDate = TaskKey[Boolean]("isUpToDate", "Description")
val settings = Seq[Setting[_]](
// ....
isUpToDate <<= fileKey.map(checkUpToDate)
)
private def checkUpToDate(f: File): Boolean = { ... }
注意您需要map
而不是apply
才能从设置键构建任务。