2011-09-08 29 views
8

Tôi đang sử dụng sbt 0.10 với Scala 2.9.1.Thu thập các phụ thuộc theo sbt 0.10 (đặt tất cả các lọ phụ thuộc vào mục tiêu/scala-version/lib /)

Tôi đã đọc http://groups.google.com/group/simple-build-tool/browse_thread/thread/792e5360877e78/987b6af687b8e33b?lnk=gst&q=collect+jars#987b6af687b8e33b

Tuy nhiên tôi không muốn có một lọ lớn. Tôi chỉ muốn các lọ phụ thuộc kết thúc trong thư mục target/scala-2.9.1.final/lib.

Lý do tại sao tôi không muốn một cái bình lớn, dự án đó sử dụng rất nhiều libs và thường chỉ áp dụng thay đổi .jar. Tuy nhiên vì điều này là dự án đa ngôn ngữ và không phải tất cả các thành viên trong nhóm đều có scala hoặc sbt, lọ chỉ được cam kết với git. Có một dar cập nhật lớn regullary sẽ thổi phồng kích thước repo.

Làm cách nào để sao chép những phụ thuộc đó? ;)

Trả lời

14

Bạn không nói rõ cấu hình ivy để sao chép các cấu hình từ nhưng đây là một ví dụ hoàn toàn làm việc mà sẽ sao chép tất cả phụ thuộc quản lý của bạn đến target/<scala version>/lib thư mục (phiên bản scala được đưa ra bởi các nhiệm vụ crossTarget). Chỉ cần sao chép này và đặt nó trong file project/Build.scala (hoặc bất kỳ tên tập tin bạn muốn):

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

Nếu bạn muốn có một cấu hình cụ thể, thay thế

updateReport.allFiles bởi updateReport.select(configuration = Set("compile")) hoặc bất cứ điều gì ivy cấu hình mà bạn muốn.

1

Các khóa "Classpath" khác nhau chứa các khung nhìn khác nhau trên classpath, nhưng có lẽ điều dễ nhất là sửa đổi plugin sbt-assembly chỉ đơn giản là thả các jars vào thư mục thay vì thực hiện unzip/rezip cycle. Plugin rất nhỏ (chỉ 150 dòng) và nó khá rõ ràng từ một cái nhìn lướt qua những gì đúng nơi để thay đổi là.

Các vấn đề liên quan