sbt任务用类路径上的项目类和一些初始命令启动Scala REPL

时间:2017-03-02 19:22:44

标签: scala sbt scala-repl

我想定义一个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

1 个答案:

答案 0 :(得分: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(我的Test扩展)中设置了ReplSession,而不是设置initialCommands }仅在配置ReplSession