Building and releasing sbt dependency

For the build manager we currently use SBT-based dependecy tracker (the previous Refined Build Manager is deprecated). 

Unfortunately we cannot use official binaries of SBT because we had to make a few breaking changes. Also sbt doesn't produce binaries which follow maven naming scheme (it uses ivy) and the current version of the Scala plugin uses only Maven. 

We maintain our own fork of sbt at https://github.com/hubertp/xsbt

Sbt requires a few dependencies for building which are not officially released (at least not for trunk). This requires that you have to build some of the dependencies yourself. It is enough to do it once locally because they are kept in Maven cache. 

The following dependencies are required:

1) browse (https://github.com/hubertp/browse) - interactive browser for Scala source code

git clone git://github.com/hubertp/browse.git 

cd browse

sbt

> +publish-local

Note that this is using old sbt (0.7) and by using it we publish locally binaries for multiple scala versions.

2) sbinary () - a library for describing binary protocols. Use plugin_version branch

git clone git://github.com/hubertp/sbinary.git

cd sbinary

git checkout plugin_version

xsbt

> +publish-local

> +publish (if you have credentials for that, it publishes to typesafe repository)

Now that we have dependencies ready (all the test dependencies are disabled because it would be too much trouble too keep up with trunk).

 

## Building Sbt

Because of an unfortunate bug, on which we are working on, for 2.9.x and 2.10.x you have to manually copy sbinary jars (compiled with respective scala compiler) to directories cache/lib and compile/persist/lib. Unfortunately managed libraries don't work (it doesn't complain about the dependency but fails to use them on the classpath) so you have to be careful to update the jars when switching versions. You can easily copy the jars from your maven cache (usually .ivy2/local/org.scala-tools.sbinary)

The next tricky part is specyfing the scala version to use to compile the sources. Unforunately this isn't as easy as in the normal sbt project but there is only a single value that manages the whole process in project/Sbt.scala. It is scalaVersionGlobal and remember to set it to whatever version you want to publish. When doing full publish for all versions I would suggest starting with latest trunk (currently 2.10.0-SNAPSHOT). That's where most of the problems occur. Also remember about bumping the version number (see version property main publish settings in project/Sbt.scala).

When you are ready you can try to build sbt and publish

xsbt 

> compile

> publish (if you have credentials)

 That's it. When doing the release you need to publish globally only sbinary and sbt project (sbinary is a runtime dependency of the latter).