Go Style Directory Layout for Scala with SBT
Dec 7 2014I’ve come to appreciate Go’s directory layout where test and build files are located side-by-side. This promotes a conscience testing priority. It also enables easy navigation to usage of a particular class/trait/object along with the implementation. After reading through the getting-better-every-day sbt documentation I noticed you can easily change default directories for sources, alleviating the folder craziness of default projects. Simply add a few lines to your build.sbt:
//Why do I need a Scala folder? I don't! //Set the folder for Scala sources to the root "src" folder scalaSource in Compile := baseDirectory.value / "src" //Do the same for the test configuration. scalaSource in Test := baseDirectory.value / "src" //We'll suffix our test files with _test, so we can exclude //then from the main build, and keep the HiddenFileFilter excludeFilter in (Compile, unmanagedSources) := HiddenFileFilter || "*_test.scala" //And we need to re-include them for Tests excludeFilter in (Test, unmanagedSources) := HiddenFileFilter
Although breaking from the norm of java-build tools may cause confusion, if you like the way something works, go for it; don’t chain yourself to past practices. I never understood the class-to-file relationship of java sources, and I absolutely hate navigating one-item folders. Thankfully Scala improved the situation, but the sbt maven-like defaults are still folder-heavy. IDEs make the situation easier, but I prefer simple text editors; and to paraphrase Dan North, “Your fancy IDE is a painkiller for your shitty language”.