2011-09-08 69 views
8

我使用sbt 0.10和Scala 2.9.1。收集sbt 0.10下的依賴關係(將所有依賴項jar放到目標/ scala-version/lib /中)

我讀過 http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

但是我不想一個巨大的罐子。我只是想依賴罐子 結束在目標/ scala-2.9.1.final/lib目錄。

爲什麼我不想要一個巨大的jar,那個項目使用了很多 libs,通常只有應用程序.jar會改變。然而,由於這個 是多語言項目,並不是所有的團隊成員都有scala或sbt,所以只需將 jar添加到git。有一個巨大的dar更新regullary 會膨脹回購規模。

如何複製這些依賴關係? ;)

回答

14

沒有指定的常春藤配置的配置從複製,但這裏有一個完全工作的例子,將複製所有託管依賴於target/<scala version>/lib文件夾(Scala的版本由crossTarget任務給出)。如果你想有一個特定的配置

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 
    ) 
) 
} 

,由你想updateReport.select(configuration = Set("compile"))或任何常春藤配置替代

updateReport.allFiles:只需複製這一點,並把它(你想或任何文件名)的文件project/Build.scala英寸

1

各種「Classpath」鍵在類路徑中包含不同的視圖,但最簡單的方法是修改sbt-assembly插件,以便將jar放入目錄,而不是進行解壓縮/重新編譯循環。該插件非常小(只有150行),從粗略瀏覽中可以明顯看出正確的地方是什麼。