However, these minor differences can slow down things a bit. For one thing, previous versions of SBT asked if you wanted to create a project if run on an empty directory, and that does not happen anymore. Now it creates some stuff automatically, but other stuff -- project name, version, scala version, directory layout -- it doesn't. So, let's take a quick look on how to accomplish (roughly) the same tasks.
In the example below, I named my SBT 0.10.0 script xsbt, so that I could use the older 0.7.7 with projects that are not yet migrated.
dcs@ayanami:~/github$ mkdir TestProject dcs@ayanami:~/github$ cd TestProject dcs@ayanami:~/github/TestProject$ xsbt Getting net.java.dev.jna jna 3.2.3 ... :: retrieving :: org.scala-tools.sbt#boot-app confs: [default] 1 artifacts copied, 0 already retrieved (838kB/35ms) Getting Scala 2.8.1 (for sbt)... :: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 4 artifacts copied, 0 already retrieved (15296kB/232ms) Getting org.scala-tools.sbt sbt_2.8.1 0.10.0 ... :: retrieving :: org.scala-tools.sbt#boot-app confs: [default] 34 artifacts copied, 0 already retrieved (6012kB/215ms) [info] Set current project to root (in build file:/home/dcs/.sbt/plugins/) [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > set name := "TestProject" [info] Reapplying settings... [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > set version := "1.0" [info] Reapplying settings... [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > set scalaVersion := "2.9.0-1" [info] Reapplying settings... Getting Scala 2.9.0-1 ... :: retrieving :: org.scala-tools.sbt#boot-scala confs: [default] 4 artifacts copied, 0 already retrieved (20447kB/186ms) [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > session save [info] Reapplying settings... [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > exit dcs@ayanami:~/github/TestProject$ find . -type d . ./project ./project/target ./project/target/config-classes ./project/target/scala_2.8.1 ./project/boot ./project/boot/other ./project/boot/other/net.java.dev.jna ./project/boot/other/net.java.dev.jna/jna ./project/boot/other/net.java.dev.jna/jna/3.2.3 ./project/boot/scala-2.9.0-1 ./project/boot/scala-2.9.0-1/lib ./project/boot/scala-2.8.1 ./project/boot/scala-2.8.1/lib ./project/boot/scala-2.8.1/org.scala-tools.sbt ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0 ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.7.7.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-src ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.9.0.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.8.1.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/xsbti ./target ./target/streams ./target/streams/$global ./target/streams/$global/$global ./target/streams/$global/$global/streams ./target/streams/$global/$global/streams/$global dcs@ayanami:~/github/TestProject$ ls build.sbt project target dcs@ayanami:~/github/TestProject$ cat build.sbt name := "TestProject" version := "1.0" scalaVersion := "2.9.0-1"
So far so good, but note that the directories for source are not created. The new version of SBT expects your IDE to do that (which is rather annoying for us vim users), or so it seems. However, the eclipse plugin can do that at the same time it creates the eclipse project. Here's an example:
dcs@ayanami:~/github/TestProject$ cat ~/.sbt/plugins/build.sbt resolvers += { val typesafeRepoUrl = new java.net.URL("http://repo.typesafe.com/typesafe/releases") val pattern = Patterns(false, "[organisation]/[module]/[sbtversion]/[revision]/[type]s/[module](-[classifier])-[revision].[ext]") Resolver.url("Typesafe Repository", typesafeRepoUrl)(pattern) } libraryDependencies <<= (libraryDependencies, sbtVersion) { (deps, version) => deps :+ ("com.typesafe.sbteclipse" %% "sbteclipse" % "1.1" extra("sbtversion" -> version)) } dcs@ayanami:~/github/TestProject$ xsbt [info] Compiling 1 Scala source to /home/dcs/.sbt/plugins/project/target/scala_2.8.1/classes... [info] Set current project to root (in build file:/home/dcs/.sbt/plugins/) [info] Compiling 8 Scala sources to /home/dcs/.sbt/staging/a69240767cc8e721757e/target/scala-2.8.1.final/classes... [info] Set current project to default (in build file:/home/dcs/github/TestProject/) > eclipse create-src [info] Updating... [info] Done updating. [info] Successfully created Eclipse project files. Please select the appropriate Eclipse plugin for Scala 2.9.0-1! > exit dcs@ayanami:~/github/TestProject$ find . -type d . ./project ./project/target ./project/target/config-classes ./project/target/scala_2.8.1 ./project/boot ./project/boot/other ./project/boot/other/net.java.dev.jna ./project/boot/other/net.java.dev.jna/jna ./project/boot/other/net.java.dev.jna/jna/3.2.3 ./project/boot/scala-2.9.0-1 ./project/boot/scala-2.9.0-1/lib ./project/boot/scala-2.8.1 ./project/boot/scala-2.8.1/lib ./project/boot/scala-2.8.1/org.scala-tools.sbt ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0 ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.7.7.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-src ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.9.0.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/compiler-interface-bin_2.8.1.final ./project/boot/scala-2.8.1/org.scala-tools.sbt/sbt/0.10.0/xsbti ./target ./target/streams ./target/streams/$global ./target/streams/$global/ivy-sbt ./target/streams/$global/ivy-sbt/$global ./target/streams/$global/ivy-configuration ./target/streams/$global/ivy-configuration/$global ./target/streams/$global/update ./target/streams/$global/update/$global ./target/streams/$global/project-descriptors ./target/streams/$global/project-descriptors/$global ./target/streams/$global/$global ./target/streams/$global/$global/streams ./target/streams/$global/$global/streams/$global ./target/scala-2.9.0.1 ./target/scala-2.9.0.1/cache ./target/scala-2.9.0.1/cache/update ./src ./src/main ./src/main/resources ./src/main/java ./src/main/scala ./src/test ./src/test/resources ./src/test/java ./src/test/scala
That's it! I strongly recommend reading the wiki linked at the beginning of this post, but this will get you going for small stuff.