How to set up a playdate between Scala, Thrift, Scrooge, SBT and Intellij

Here at VictorOps, we are going through the process of overhauling the serialization framework that we use for inter and intra process communication. We evaluated several great options including Kryo (and its Scala companion Chill), Protobuffers, and Thrift. In the process, we put together a little test project to help us decide which of these choices was right for us. Testing Thrift posed some challenges as the tooling, while quite mature, wasn’t quite as plug-n-play with our local development environment as we would have liked. The following instructions assume a basic knowledge of the Scala/SBT framework, Thrift, and (optionally) Intellij.

What is needed:

– SBT – Intellij (with Scala Plugin installed)

Steps:

  1. Create a new project with a build.sbt file and add the following lines:
    This will add the Thrift and Scrooge dependencies to your sbt project.
  2. If you do not already have a project/plugins.sbt file, create one and add the following line:
  3. Create a new directory to hold your Thrift files (by default, Scrooge will check in src/main/thrift, which worked fine for us).
  4. Define some Thrift files, if you want, here is a simple example:
  5. By default, Intellij marks everything in the target/ directory as ‘excluded’ for builds. We are gonna have to do something about that.
    • – Open up the “project structure” window & click “modules” in the right hand menu.
      Screenshot 2015-03-03 15.16.27
    • – Click on the name of your project, you should see the directory structure appear
      Screenshot 2015-03-03 15.17.05
    • – Click “target” and uncheck “Excluded”
      Screenshot 2015-03-03 15.17.13
    • – Expand “target” and mark all subfolders as “Excluded” except for scala-version.no
      screenshot_2015-03-05_13.05.49
    • – Expand “scala-version.no” and mark all folders as “Excluded” except for “src_managed” which you should mark as “Source”
      Screenshot 2015-03-03 15.18.30
  6. Run an SBT clean, scrooge-gen, and compile. All generated files should now be visible to both SBT and Intellij (hooray for syntax highlighting) Hope this helps anyone in a similar situation. Another thing to note was that updating *.thrift files would cause SBT to become a bit “unhappy”. To rectify this, simply run a scrooge-gen and a clean after making edits.

Happy serializing 🙂