我可以让 sbt 仅针对特定任务编译具有附加依赖项的附加源吗?

Can I make sbt compile additional sources with additional dependencies only for a specific task?

我在编写代码时使用喷雾左轮手枪来测试我的应用程序。

我想让左轮手枪运行编译额外的源(例如 /src/dev.scala 或其他)与额外的依赖。这样在本地测试时,我可以在同一个虚拟机中启动我们正在使用的一些外部服务(例如 cassandra),而无需设置适当的环境。

最初我尝试像这样设置这些设置:

unmanagedSources in Revolver.reStart <<= (unmanagedSources in Compile) map { ss => ss :+ new File("/path/to/my/dev.scala") }

libraryDependencies in Revolver.reStart += ("org.cassandraunit" % "cassandra-unit" % "2.0.2.1")

mainClass in Revolver.reStart := Some("my.main.class.in.dev")

但是在运行任务时,我发现主 class 不存在。

有什么方法可以实现吗?这个想法是为了避免将 dev.scala 中的 cassandra 单元和代码排除在测试和打包的编译之外。

那不行,因为Revolver.reStart仍然使用compile in Compile,而compile in Compile使用libraryDependencies不是libraryDependencies in Revolver.reStart.

为此,您需要定义一个完全不同的自定义 配置 来扩展您的 Compile 配置。在该配置中,例如 "Localcompile",您可以使用

定义您的依赖项
unmanagedSources in Localcompile += new File("/path/to/my/dev.scala")

libraryDependencies += "org.cassandraunit" % "cassandra-unit" % "2.0.2.1" % "localcompile"

有关示例,请参阅 http://www.scala-sbt.org/0.13/docs/Advanced-Configurations-Example.html