默认情况下,SBT分别在src/main
和和src/tests
下编译源代码。我想定义另一个名为core的组,我可以将其放入或将其编译到单独的类路径中。我该怎么做呢?target/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 ?
我现在去阅读有关范围的内容...