0

我想定义一个 sbt 任务,它将启动 scala 控制台,并在类路径上使用项目的已编译类并执行一些初始命令。

我想像这样开始那个 REPL 会话

sbt session

这是我根据其他答案汇总的抱歉尝试,但是既不将项目的类放在类路径上,也不不执行初始命令:

// extend Test in hope to include compiled sources on the classpath.
val ReplSession = config("repl-session") extend(Test)

val root = project.in(file("."))
  .configs(ReplSession)
  .settings(inConfig(ReplSession)(initialCommands := """
    | import foo._
    | """.stripMargin))

// define task that starts the REPL session
lazy val session = TaskKey[Unit]("session")
session <<= Seq(
  console in (root, ReplSession)
).dependOn
4

1 回答 1

0

注意:如果有人有更好的解决方案,我会将其标记为正确答案。

对我有用的是改变

inConfig(ReplSession)(initialCommands := ...)

在我的原始片段中

inConfig(Test)(initialCommands := ...)

或者,或者,

initialCommands in (Test, console) := ...

为了完整起见,这是我现在使用的:

val ReplSession = config("repl-session") extend(Test)

val root = project.in(file("."))
  .configs(ReplSession)

lazy val session = TaskKey[Unit]("session")
session <<= Seq(
  console in (root, ReplSession)
).dependOn

initialCommands in (Test, console) := """
  | import foo._
  | """.stripMargin

我认为这不是最佳选择,因为我initialCommands在 config Test(我的ReplSession扩展)中进行设置,而不是initialCommands仅在 config中进行设置ReplSession

于 2017-03-06T20:36:26.013 回答