I am new to Simple Build Tool and also to building REST APIs in Scala. Mostly I have been using Python with Bottle for REST APIs up until this point. For our current project our REST API will be written in Scala, so I wanted to try out Scalatra. They have excellent documentation and examples, however they assume you have a good understanding of Simple Build Tool (known as sbt or xsbt). I will walk you through running the Scalatra example with Simple Build Tool, assuming you are using it for the first time.
The example we are using is the main example from Scalatra’s website http://www.scalatra.org/.
Get the example application
Clone the Scalatra Hello World REST API example application using git.
git clone http://github.com/scalatra/scalatra-sbt-prototype.git
Download Simple Build Tool
Download version 10 (used for the Scalatra example) of Simple Build Tool into the “scalatra-sbt-prototype” directory.
cd scalatra-sbt-prototype wget http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/0.10.0/sbt-launch.jar
NOTE: If you use version 0.11.0 of Simple Build Tool with this example you will get the error: “sbt.ResolveException: unresolved dependency: com.github.siasia#xsbt-web-plugin_2.9.1;0.1.0-0.11.0: not found”.
Create a script to run Simple Build Tool
In the “scalatra-sbt-prototype” directory create a file called “sbt.sh” containing the following text:
java -Xmx512M -XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch.jar "$@"
Also, make sure the script is executable:
chmod 755 sbt.sh
NOTE: setting MaxPermSize is important. This example will sometimes throw a “Error during sbt execution: java.lang.OutOfMemoryError: PermGen space” error if the PermGen memory size has not been increased.
Run the example
In the “scalatra-sbt-prototype” folder execute the sbt script:
Once the Simple Build Tool prompt has opened, you can now start the web app which uses Jetty:
Confirm it is working
If everything went as planned, you should be able to navigate to http://localhost:8080/ and see “Hello World”.