package
、packageSrc
、packageDoc
などのタスクは、入力ファイルから結果のアーティファクト(jar)で使用するパスへの Seq[(File, String)]
型のマッピングを受け入れます。同様に、ファイルをコピーするタスクは、入力ファイルから宛先ファイルへの Seq[(File, File)]
型のマッピングを受け入れます。Seq[(File, String)]
または Seq[(File, File)]
シーケンスの構築に役立つ PathFinder および Path のメソッドがいくつかあります。
このシーケンスを作成する一般的な方法は、PathFinder
または Seq[File]
(PathFinder
に暗黙的に変換可能)から始めて、pair
メソッドを呼び出すことです。詳細は PathFinder API を参照してください。基本的にこのメソッドは、マッピングの生成に使用される関数 File => Option[String]
または File => Option[File]
を受け入れます。
Path.relativeTo
メソッドは、File
をベースディレクトリまたはディレクトリに対する相対パス String
にマップするために使用されます。relativeTo
メソッドは、入力ファイルを相対化するベースディレクトリまたはベースディレクトリのシーケンスを受け入れます。ベースディレクトリのシーケンスの場合、ファイルの先祖である最初のディレクトリが使用されます。
例えば
import Path.relativeTo
val files: Seq[File] = file("/a/b/C.scala") :: Nil
val baseDirectories: Seq[File] = file("/a") :: Nil
val mappings: Seq[(File,String)] = files pair relativeTo(baseDirectories)
val expected = (file("/a/b/C.scala") -> "b/C.scala") :: Nil
assert( mappings == expected )
Path.rebase
メソッドは、入力ファイルを1つ以上のベースディレクトリ(最初の引数)に対して相対化し、結果にベース文字列またはファイル(2番目の引数)を付加します。 relativeTo
と同様に、複数のベースディレクトリの場合、入力ファイルの先祖である最初のベースディレクトリが使用されます。
たとえば、次の例は rebase
を使用して Seq[(File, String)]
を構築する方法を示しています。
import Path.rebase
val files: Seq[File] = file("/a/b/C.scala") :: Nil
val baseDirectories: Seq[File] = file("/a") :: Nil
val mappings: Seq[(File,String)] = files pair rebase(baseDirectories, "pre/")
val expected = (file("/a/b/C.scala") -> "pre/b/C.scala" ) :: Nil
assert( mappings == expected )
または、Seq[(File, File)]
を構築するには
import Path.rebase
val files: Seq[File] = file("/a/b/C.scala") :: Nil
val baseDirectories: Seq[File] = file("/a") :: Nil
val newBase: File = file("/new/base")
val mappings: Seq[(File,File)] = files pair rebase(baseDirectories, newBase)
val expected = (file("/a/b/C.scala") -> file("/new/base/b/C.scala") ) :: Nil
assert( mappings == expected )
Path.flat
メソッドは、ファイルをパスの最後のコンポーネント(その名前)にマップする関数を提 供します。ファイル対ファイルのマッピングの場合、入力ファイルは、指定されたターゲットディレクトリ内の同じ名前のファイルにマップされます。例えば
import Path.flat
val files: Seq[File] = file("/a/b/C.scala") :: Nil
val mappings: Seq[(File,String)] = files pair flat
val expected = (file("/a/b/C.scala") -> "C.scala" ) :: Nil
assert( mappings == expected )
flat
を使用して Seq[(File, File)]
を構築するには
import Path.flat
val files: Seq[File] = file("/a/b/C.scala") :: Nil
val newBase: File = file("/new/base")
val mappings: Seq[(File,File)] = files pair flat(newBase)
val expected = (file("/a/b/C.scala") -> file("/new/base/C.scala") ) :: Nil
assert( mappings == expected )
ファイルに複数の代替マッピングを適用しようとするには、|
を使用します。これは A => Option[B]
型の関数に暗黙的に追加されます。たとえば、いくつかのベースディレクトリに対してファイルを相対化しようとしますが、フラット化にフォールバックするには
import Path.relativeTo
val files: Seq[File] = file("/a/b/C.scala") :: file("/zzz/D.scala") :: Nil
val baseDirectories: Seq[File] = file("/a") :: Nil
val mappings: Seq[(File,String)] = files pair ( relativeTo(baseDirectories) | flat )
val expected = (file("/a/b/C.scala") -> "b/C.scala") ) :: (file("/zzz/D.scala") -> "D.scala") ) :: Nil
assert( mappings == expected )