デフォルトでは、SBTはソースをそれぞれ下src/main
とsrc/tests
totarget/scala-[version]/classes
とtarget/scala-[version]/test-classes
にコンパイルします。コアと呼ばれる別のグループを定義したいのですが、これを入れsrc/core/java
たりsrc/core/scala
、別のクラスパスにコンパイルしたりできます。どうすればよいですか?
私の動機:実行中のアプリケーションのJVMプロセスを再起動せずに、開発中に新しいアプリケーションコードを再コンパイルして再ロードしたいので、クラスファイルのグループを分けたいと思っています。したがって、コアクラスはアプリケーションの起動時にロードされ、カスタムクラスローダーを使用してsrc/mainから他のすべてをロードします。後者のクラスはリロード可能です。これを行う必要があるのは、ロードに時間がかかるJNIを介してソフトウェアインストゥルメントをロードする音楽プログラムを作成しているためです。開発中にアプリを再起動すると、時間がかかりすぎます。
私は主にクラスファイルを分離する必要があります。jarを作成する場合は、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 ?
スコープについて読みに行きます...