Scala 在sbt中从sbt.package.File转换为java.io.File

Scala 在sbt中从sbt.package.File转换为java.io.File,scala,sbt,sbt-android-plugin,Scala,Sbt,Sbt Android Plugin,我正在为SBT扩展Jan Berkel的Android插件 现在,我想知道如何将sbt.SettingKey[sbt.package.File]转换为java.io.File?有没有办法从sbt.SettingKey[sbt.package.File]中提取java.io.File 例如: 我有一个功能: def isUpToDate(input: java.io.File): Boolean 它需要java.io.File作为参数 我有一个sbt.SettingKey[sbt.package

我正在为SBT扩展Jan Berkel的Android插件

现在,我想知道如何将
sbt.SettingKey[sbt.package.File]
转换为
java.io.File
?有没有办法从
sbt.SettingKey[sbt.package.File]
中提取
java.io.File

例如:

我有一个功能:

def isUpToDate(input: java.io.File): Boolean
它需要
java.io.File
作为参数

我有一个
sbt.SettingKey[sbt.package.File]
(名为
myFileKey
),它映射到我需要的
文件


当文件映射到
myFileKey
时,如何调用
isupdate

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

请阅读中的“任务键”部分,以决定您是需要依赖普通设置键(静态)还是依赖另一个任务的结果(动态)。在我看来,您的
是最新的
可能需要反复评估。因此,您需要一项任务

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

private def checkUpToDate(f: File): Boolean = { ... }
val isUpToDate=TaskKey[Boolean](“isUpToDate”、“Description”)
val设置=顺序[设置[]](
// ....

isUpToDate出于好奇:声明的
sbt.package.File
在哪里?我快速搜索了源代码(0.13分支,cbc94f9cb6),但没有找到任何这样的声明。它在0.11分支中,仅仅是一个类型别名(
package object sbt{…type File=java.io.File…}
),但这不会简单地返回另一个键给我[什么]?抱歉问了这么多愚蠢的问题,我是Scala的新手/SBT@Lopina,它将把它变成一个
键[Something]
。但是,作为一个副作用,您可以使用该文件来做一些事情。是的,它定义了在给定文件上工作的您自己任务的键。您需要更具体地说明如何使用它。
yourKey <<= fileKey.apply { file => ... }
val yourKey  = SettingKey[File]("yourKey", "Description")
val settings = Seq[Setting[_]](
  // ....
  yourKey <<= fileKey { f => f / "subdirectory" }
)
val isUpToDate = TaskKey[Boolean]("isUpToDate", "Description")
val settings = Seq[Setting[_]](
// ....
   isUpToDate <<= fileKey.map(checkUpToDate)
)

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