2013-02-01 28 views
5

Theo mặc định, SBT biên dịch nguồn theo số src/mainsrc/tests đến target/scala-[version]/classestarget/scala-[version]/test-classes, tương ứng. Tôi muốn xác định một nhóm khác được gọi là lõi mà tôi có thể đặt trong src/core/java hoặc src/core/scala và đã được biên soạn thành một đường dẫn lớp riêng biệt. Làm thế nào để tôi làm điều này?Làm thế nào để xác định phạm vi biên dịch khác trong SBT?

Động cơ của tôi: Tôi muốn có các nhóm lớp riêng biệt, vì tôi muốn biên dịch lại và tải lại mã ứng dụng mới trong quá trình phát triển mà không cần khởi động lại quy trình JVM cho ứng dụng đang chạy. Vì vậy, các lớp lõi sẽ tải khi ứng dụng bắt đầu và chúng sẽ sử dụng trình nạp lớp tùy chỉnh để tải mọi thứ khác từ src/main. Những lớp sau sẽ được tải lại. Tôi cần phải làm điều này bởi vì tôi đang viết một chương trình âm nhạc tải một công cụ phần mềm thông qua JNI, mất nhiều thời gian để tải. Khởi động lại ứng dụng trong quá trình phát triển lãng phí quá nhiều thời gian.

Tôi chủ yếu cần tách các tệp lớp. Nếu tôi đang sản xuất lọ, tôi muốn myapp-core.jar và myapp-main.jar, nhưng điều đó không quan trọng, vì đây là để phát triển nhiều hơn sản phẩm cuối cùng.

Một nỗ lực đầu tiên:

val Core = config("core") 
... 
classDirectory in Core <<= crossTarget(t => file(t.getAbsolutePath + "core-classes")) 

cho lỗi này:

Reference to undefined setting: 
{.}/*:cross-target from {.}/core:class-directory 
    Did you mean *:cross-target ? 

Tôi sẽ đi đọc về phạm vi bây giờ ...

Trả lời

5

Có một advanced configurations example trong tài liệu SBT rằng cho thấy nhiều khía cạnh của cấu hình biên dịch tùy chỉnh.

Một ví dụ cơ bản là:

object MyBuild extends Build { 

    lazy val root = Project(..., 
    settings = Defaults.defaultSettings ++ coreSettings 
) 

    // Declare the custom configuration. 
    lazy val Core = config("core") 

    lazy val coreSettings: Seq[Setting[_]] = 
    // Add the src/core/scala/ compilation configuration. 
    // This configures sources, classpaths, output directories, REPL, scalac, ... 
    inConfig(Core)(Defaults.configSettings) ++ Seq(
     // example dependency just for Core 
     libraryDependencies += "org.example" % "demo" % "1.0" % Core, 
     // register the custom core configuration 
     ivyConfigurations += Core 
    ) 
} 

Truy cập classpath lõi biên soạn qua nhiệm vụ fullClasspath in Core.

+0

Nếu ví dụ có liên quan nhiều hơn bạn cần hoặc hiểu, bạn muốn làm gì cụ thể với cấu hình bổ sung? Xuất bản nó, bao gồm nó trong bình chính, ...? –

+0

Tôi chưa hiểu ví dụ đó. Tôi đã thêm vào câu hỏi để giải thích những gì tôi muốn làm với cấu hình bổ sung. –

+0

Công trình này rất tuyệt, nhưng làm thế nào để bạn có thể cấu hình Core cho cấu hình Test? – Brendanator

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