2011-09-08 17 views
8

私はScala 2.9.1でsbt 0.10を使用しています。sbt 0.10での依存関係の収集(すべての依存関係jarをターゲット/ scala-version/lib /に置く)

私は1つの巨大なjarファイルをしたくないしかし、私は http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

を読みました。私はちょうど依存性の瓶 がtarget/scala-2.9.1.final/libディレクトリに終わるようにしたい。

私は1つの巨大な瓶が欲しくない理由は、そのプロジェクトは多くの のlibsを使用し、通常はアプリケーション.jarだけが変わります。しかし、 は多言語プロジェクトであり、すべてのチームメンバーがscalaまたはsbtを持っているわけではないので、 jarはgitにコミットされます。 1つの巨大なdarが定期的に更新されると、 はレポサイズを膨らませます。

どのようにこれらの依存関係をコピーできますか? ;)

答えて

14

あなたはから設定をコピーするにはツタの設定を指定しますが、ここでtarget/<scala version>/libフォルダへすべて管理対象の依存関係(ScalaのバージョンcrossTargetタスクで与えられる)をコピーします完全に動作する例ですませんでした。あなたが特定の設定をしたい場合は、updateReport.select(configuration = Set("compile"))または任意のツタ設定したいで

updateReport.allFilesを交換

import sbt._ 
import Keys._ 

object MyBuild extends Build { 

    lazy val copyDependencies = TaskKey[Unit]("copy-dependencies") 

    def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map { 
    (updateReport, out, scalaVer) => 
    updateReport.allFiles foreach { srcPath => 
     val destPath = out/"lib"/srcPath.getName 
     IO.copyFile(srcPath, destPath, preserveLastModified=true) 
    } 
    } 

    lazy val root = Project(
    "root", 
    file("."), 
    settings = Defaults.defaultSettings ++ Seq(
     copyDepTask 
    ) 
) 
} 

:ちょうどこれをコピーして、ファイルproject/Build.scala(または任意のファイル名にしたい)に入れて。

1

さまざまな「クラスパス」キーにはクラスパス上のさまざまなビューが含まれていますが、最も簡単な方法は、unzip/rezipサイクルを実行するのではなく、単にjarsをディレクトリにドロップするようにsbtアセンブリプラグインを変更することです。プラグインは非常に小さく(わずか150行です)、変更が適切な場所が何であるか簡単にわかります。

関連する問題