0

我正在为 SBT 扩展 Jan Berkel 的 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

4

2 回答 2

1

您将需要使用组合依赖项,使用设置键<<=的方法提取文件。apply例如

yourKey <<= fileKey { file => ... }

这是缩写

yourKey <<= fileKey.apply { file => ... }

请参阅sbt getting-started-guide的“根据其他键的值计算值”部分。

另请注意,这sbt.File只是java.io.File.


例如映射一些文件:

val yourKey  = SettingKey[File]("yourKey", "Description")
val settings = Seq[Setting[_]](
  // ....
  yourKey <<= fileKey { f => f / "subdirectory" }
)
于 2012-07-16T13:26:13.163 回答
1

关于更新的问题。我仍然假设您正在修改现有的 sbt 插件。因此,您仍然需要引入依赖项。设置键的值仅在构建过程的特定阶段有效。因此,要检索该值,您需要依赖于设置键。

请阅读.sbt 构建定义文档中的“任务键”部分,以决定您是需要依赖普通设置键(静态)还是另一个任务的结果(动态)。在我看来,您isUpToDate可能需要一遍又一遍地重新评估。因此,您将需要一项任务。

val isUpToDate = TaskKey[Boolean]("isUpToDate", "Description")
val settings = Seq[Setting[_]](
// ....
   isUpToDate <<= fileKey.map(checkUpToDate)
)

private def checkUpToDate(f: File): Boolean = { ... }

Note that you need map here instead of apply in order to construct a task from a setting key.

于 2012-07-16T15:14:08.450 回答