After many attempts to get the best uber-jar possible with sbt, I have eventually found that it is much easier to use sbt-native-packager
It can be added through an sbt plugin in project/plugins.sbt
file:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M9")
and enabled in build.sbt
file:
enablePlugins(JavaAppPackaging)
Creating a package complete with shell script is as easy as running the sbt command:
sbt universal:packageZipTarball
This file can then be uploaded to the server, unzipped and then the app run:
cd archiveDirectory
./bin/app_name