如何在SBT中定义另一个编译范围?

如何在SBT中定义另一个编译范围?,sbt,Sbt,默认情况下,SBT分别将src/main和src/tests下的源代码编译为target/scala-[version]/classes和target/scala-[version]/test classes。我想定义另一个名为core的组,我可以将其放入src/core/java或src/core/scala中,并将其编译到单独的类路径中。我该怎么做 我的动机是:我希望有单独的类文件组,因为我希望在开发过程中重新编译和重新加载新的应用程序代码,而无需重新启动正在运行的应用程序的JVM进程。因此

默认情况下,SBT分别将
src/main
src/tests
下的源代码编译为
target/scala-[version]/classes
target/scala-[version]/test classes
。我想定义另一个名为core的组,我可以将其放入
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"))
我现在将阅读有关作用域的内容…

sbt文档中有一个示例,显示了自定义编译配置的许多方面

一个基本的例子是:

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
     )
}

通过核心中的
fullClasspath
任务访问已编译的核心类路径。

如果示例涉及的内容超出了您的需要或理解,您具体想对附加配置做什么?发布它,将它包含在主jar中,…?我还不理解这个例子。我在问题中添加了解释我想对附加配置做什么的内容。这很好,但是如何使核心配置可用于测试配置?这些配置是分开的,因为它们彼此不扩展。您必须通过
Test
扩展
Core
,以实现依赖项组继承。您到底想实现什么,以便
Core
配置可供
Test
one使用?
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
     )
}