2011-07-08 9 views
10

mavenディレクトリ構造を使用しない既存のプロジェクトをコンパイルするようにSBTを設定しようとしています。私はfull configurationと、次のように私のjavaSource & resourceDirectory設定を設定しているを使用しています:SBTのリソースをフィルタリングする

def settings = Defaults.defaultSettings ++ Seq(
    resourceDirectory in Compile <<= baseDirectory(_/"java"), 
    javaSource in Compile <<= baseDirectory(_/"java") 
) 

我々は現在、アリで行う、プラス除外するとして今私は、我々はジャーアーティファクトに含めるリソースをフィルタリングすることができるようにしたいです。私たちのリソースがソースコードと混ざり合っているので、javaファイル。例:

<fileset dir="java" includes="**/*.txt, **/*.csv" excludes="**/*.java" /> 

これを実行する方法はありますか。

+0

これはSBT 0.10です。 –

+0

価値があるsbt10タグを作成しますか?これはsbt07と非常に異なっています... – opyate

+1

副通知 - 'defaultExcludes'は' excludeFilter'の代わりに廃止されましたsbt 0.11 – wbarksdale

答えて

6

unmanagedResourcesタスクとオプションの設定については、defaultExcludesを使用してください。たとえば、この設定は、メインリソースから.javaファイルを除外:

defaultExcludes in Compile in unmanagedResources := "*.java" 

in Compileは本体のみのリソースに適用するには、この設定を制限しています。代わりにin Testを使用すると、テストリソースにのみ適用されます。構成を省略すると(つまり、in Compileまたはin Test)、設定はメインリソースとテストリソースの両方に適用されます。

in unmanagedResourcesは、リソースに対してのみこれらの除外を適用します。たとえば、ソースに除外を適用するには、範囲はin unmanagedSourcesになります。管理されていない部分は、管理されていない(または手動で編集した)ソースのみに適用されることを強調します。

defaultExcludesキーのタイプはsbt.FileFilterなので、設定値はこのタイプにする必要があります。上記の例では、"*.java"が暗黙的にFileFilterに変換されています。 *はワイルドカードとして解釈されるため、フィルタは '.java'で終わる名前のファイルを受け入れます。フィルタを組み合わせるには、||&&を使用します。同様に除外されるために必要な.scalaファイル場合たとえば、:=への引数は次のようになります。一つだけであるので、元のAntファイルセットで

"*.java" || "*.scala" 

、includeおよびexcludeフィルターは、ファイルの相互排他的なセットを選択します必要。

unmanagedResourcesの場合はSeq[File]を直接ビルドすることもできます。例えば:

unmanagedResources in Compile <<= 
    unmanagedResourceDirectories in Compile map { (dirs: Seq[File]) => 
    (dirs ** ("*.txt" || "*.csv" -- "*.java")).get 
    } 

**方法はFileFilter引数に一致するすべての子孫を選択します。 show unmanaged-resourcesを実行すると、ファイルが期待通りに選択されていることを確認できます。

+0

これは.javaファイルを除外したい場合に有効です。特定のファイルセットのみを含めることはできますか?可能であれば、 'sbt.FileFilter'を無効にするとうまくいくと思います。 –

+0

補完的な「インクルード」設定などはありません。ソースには 'sourceFilter'、クラスパスには' classpathFilter'がありますが、リソースはありません。 'unmanagedResourcesにインクルードする'のようなものの下でこれらを統一すると便利ですので、あなたは[バグを開く](https://github.com/harrah/xsbt/issues)かもしれません。 'FileFilter'を否定することは可能ですが、ここでは役に立ちません。 –

+0

答えを編集して、リソース設定を直接構築する方法について説明しました。 –

関連する問題