Есть ли простой способ скопировать JAR Scala на сервер (~ 1 МБ), а затем SBT вытащить необходимые ему зависимости (~ 40 МБ) и запустить его?
Я видел sbt-onejar и sbt-assembly , но они объединяют все зависимости в один jar-файл, который в моем случае становится ~ 45 МБ, что занимает слишком много времени для загрузки на сервер.
В настоящее время я использую Capistrano для извлечения кода из GitHub и его компиляции. Затем я запускаю его с помощью xsbt-start-script-plugin - аналогично тому, как Heroku управляет этим.
Проблема в том, что компиляция занимает много времени на серверах (я использую EC2). EC2 Micro с оперативной памятью ~ 600 МБ занимает безумно долго и иногда случайным образом убивает процесс. Я использую небольшой экземпляр EC2 (1,7 ГБ ОЗУ), который работает в данный момент, но по мере увеличения базы кода и добавления новых серверов это может стать проблемой.
Идеальный рабочий процесс - это локальная компиляция исходных кодов Scala (или на сервере CI), копирование на сервер, добавление SBT дополнительных зависимостей с момента последней сборки (существующие будут исходить из локального кэшированного репозитория плюща), а затем предоставление мне с помощью простого скрипта для запуска сервиса с Upstart в Ubuntu 10.04.
Я также хотел бы услышать, как другие пользователи Scala используют свой код.
(код из "ответа", позже опубликованный OP)
Вот мои файлы сборки.
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")