In this short post, I would like to explain how to use
As you very likely know, running
sbt console in a project gives you a Scala repl which includes your app sources as well as it’s dependencies (see the official sbt docs). While this is handy, it misses specific details for your app, like commonly required methods while experimenting.
The way to get this involves a couple of sbt options:
In summary, let’s add the
console.scala file to the root of your project, which can look like (add any common imports or initializing code specific to your app):
build.sbt to exclude the file from compiling, (otherwise, sbt may complain compiling your script), and to set the initialization script, which can be as simple as:
// initialization script for the console val consoleInitialCommandsFile = "console.scala" excludeFilter := HiddenFileFilter || consoleInitialCommandsFile lazy val consoleScript = scala.util.Try(scala.io.Source.fromFile(consoleInitialCommandsFile).mkString).getOrElse("") initialCommands in console := consoleScript
You can even build several entrypoints for different purposes by extending this idea, which should help your team to speed up experimenting, in my case, it’s pretty useful to have a handy websocket client for my server without the complexity of building one.
If you have enabled the fatal-warnings compiler option (and most likely you should), the Scala repl becomes unusable, but, it’s easily fixed by disabling that options and other noisy options just when running the console, include the following on your
// Some options are very noisy when using the console and prevent us using it smoothly, let's disable them val consoleDisabledOptions = Seq("-Xfatal-warnings", "-Ywarn-unused", "-Ywarn-unused-import") scalacOptions in (Compile, console) ~= (_ filterNot consoleDisabledOptions.contains)
The source of this post can be found here