Theo mặc định, SBT biên dịch nguồn theo số src/main
và src/tests
đến target/scala-[version]/classes
và target/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ờ ...
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, ...? –
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. –
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