0

Jan Berkel の Android Plugin for SBT の拡張に取り組んでいます。

現在、どのように変換でき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](という名前の) を持っています。 myFileKeyFile

isUpToDateにマップされたファイルを使用して呼び出すにはどうすればよいmyFileKeyですか?

4

2 に答える 2

1

更新された質問について。私はまだ、既存の sbt プラグインを変更していると仮定しています。したがって、依存関係を導入する必要があります。設定キーの値は、ビルド プロセスの特定の段階でのみ有効になります。したがって、その値を取得するには、設定キーに依存する必要があります。

.sbt ビルド定義ドキュメントの「タスク キー」セクションを読んで、単純な設定キー (静的) に依存する必要があるか、別のタスクの結果 (動的) に依存する必要があるかを判断してください。isUpToDate何度も再評価する必要があるように思えます。したがって、タスクが必要になります。

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

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

設定キーからタスクを構築するには、map代わりにここが必要であることに注意してください。apply

于 2012-07-16T15:14:08.450 に答える
1

を使用して依存関係を構成し、設定キーのメソッドを<<=使用してファイルを抽出する必要があります。apply例えば

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

の略です

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

sbt Getting-started-guide の「Computing a value based on other keys's values」セクションを参照してください。

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 に答える