2011-10-10 9 views
6

私はSBTとScalaのシーン全体を初めて知り、Java/ScalaクラスとHibernateを使用するプロジェクトを構築しようとしています。私はプロジェクトをうまくビルドするようになっています - 私は休止状態でピックアップできるように私のtarget/scala<version>/classesフォルダに自分の休止状態の設定ファイルを手動でコピーする必要があります。コンパイル時にディレクトリをコピーするSBTタスクを作成しますか?

SBTでこれらのフォルダを各コンパイルにコピーするタスクを作成する方法はありますか?

import sbt._ 

object Sportsbook extends Build { 
    lazy val project = Project (
    "sportsbook", 
    file("."), 
    copyConfigTask 
) 

    val copyConfig = TaskKey[Unit]("copy", "Copy hibernate files over to target directory") 

    /* 
    // Something like this 
    lazy val copyConfigTask = copyConfig <<= 
    val configDir1 = baseDirectory/"config" 
    val configDir2 = outputPath/"config" 
    IO.copyDirectory(configDir1, configDir2) 
    */ 
} 

答えて

12

これを達成するための最も直接的な手段は./src/main/resources/configにファイルを移動することです:これは私のBuild.scalaファイルです。

また、${base}/config~resourceDirectories in Compileを追加してください。

resourceDirectories in Compile <+= baseDirectory/"config" 

残念ながら、そこのファイルはクラスパスのルートにコピーされます。復元するには、それらを./src/config/configに移動する必要があります。 (リソースについてのmappingsbased on the relative location of resource files to the base resource directoriesである方法を参照してください)

ファイルをJARにパッケージしますか?これらの答えの両方がその結果になります。これを避けるには、mappings in packageBinから取り除くことができます。

mappings in (Compile, packageBin) ~= (_.filter { case (file, outpath) => outpath.startsWith("/config")}) 
+0

ありがとうございます - 私はちょうど最初に行った。何らかの理由で、私の頭のリソースをjarファイルだけでリンクしていました。この方法はずっと簡単です。 – user988427

+0

@ user988427それはあなたのために働いているので、答えを承認することができますか? –

関連する問題