默認情況下,SBT分別編譯源src/main
和src/tests
到target/scala-[version]/classes
和target/scala-[version]/test-classes
。我想定義另一個名爲的核心組,我可以將它放在src/core/java
或src/core/scala
中,並將其編譯爲單獨的類路徑。我該怎麼做呢?如何在SBT中定義另一個編譯範圍?
我的動機:我希望有單獨的類文件組,因爲我想在開發過程中重新編譯和重新加載新的應用程序代碼,而無需重新啓動正在運行的應用程序的JVM進程。因此,核心類將在應用程序啓動時加載,並且它們將使用自定義類加載器從src/main加載其他所有內容。後面的類將可以重新加載。我需要這樣做,因爲我正在編寫一個音樂程序,通過JNI加載軟件樂器,這需要很長時間才能加載。在開發過程中重新啓動應用程序會浪費太多時間。
我主要需要分開類文件。如果我生產罐子,我想要myapp-core.jar和myapp-main.jar,但這並不重要,因爲這對於開發而言不僅僅是最終產品。
第一次嘗試:
val Core = config("core")
...
classDirectory in Core <<= crossTarget(t => file(t.getAbsolutePath + "core-classes"))
給出了這樣的錯誤:
Reference to undefined setting:
{.}/*:cross-target from {.}/core:class-directory
Did you mean *:cross-target ?
我會去了解現在範圍...
如果這個例子比您需要或理解的更多,那麼您希望使用哪種附加配置?發佈它,將它包含在主jar中,...? –
我還不明白這個例子。我已經添加了這個問題來解釋我想要的附加配置。 –
這很好用,但是如何使Core配置可用於測試配置? – Brendanator