有没有一种简单的方法可以将Scala Jar(~1MB)复制到服务器,然后让SBT获取所需的依赖项(~40MB)并运行它?
我已经看过sbt-onejar和sbt-assembly,但是这些将所有依赖项捆绑到一个jar中,在我的情况下变为~45MB,这需要很长时间才能上传到服务器.
目前我使用Capistrano从GitHub检出我的代码并编译它.然后我使用xsbt-start-script-plugin运行它 - 类似于Heroku管理它的方式.
问题是编译需要很长时间在服务器上(我正在使用EC2).带有~600MB冲头的EC2 Micro需要很长时间,有时会随机杀死该过程.我正在使用目前正在运行的EC2 Small实例(1.7GB ram),但随着代码库的增加而我添加了更多服务器,它可能会出现问题.
理想的工作流程是在本地(或在CI服务器上)编译Scala源,复制到服务器,让SBT引入自上次构建以来添加的其他依赖项(现有的将来自本地缓存的常春藤repo),然后为我提供一个简单的在Ubuntu 10.04上使用Upstart运行服务的脚本.
我还想了解其他Scala用户如何部署他们的代码.
(OP后来发布的"回答"代码)
FWIW这里是我的构建文件.
build.sbt
import com.typesafe.startscript.StartScriptPlugin
name := "XXX"
version := "0.1.0"
scalaVersion := "2.9.1"
resolvers += "XXX" at "http://repo.XXX.XXX"
libraryDependencies += "XXXX" %% "backend" % "0.1.0"
seq(StartScriptPlugin.startScriptForJarSettings: _*)
mainClass in Compile := Some("XXX.app.Main")
项目/ build.sbt
resolvers += Classpaths.typesafeResolver
addSbtPlugin("com.typesafe.startscript" % "xsbt-start-script-plugin" % "0.5.0")
addSbtPlugin("com.eed3si9n" % "sbt-dirty-money" % "0.0.1")