Как запустить проект приложения под управлением sbt без sbt? - PullRequest
12 голосов
/ 25 августа 2011

Мой вопрос касается запуска приложения, которое находится в проекте, управляемом sbt 0.10.1, и, следовательно, полагается на его автоматическое управление зависимостями (для загрузки и установки соответствующего classpath для запуска).

При использовании автоматическогоДля управления зависимостями кажется , что единственный способ запустить приложение - использовать сам sbt, потому что он знает, как настроить путь к классам (с помощью Ivy2).

Как мне запуститьприложение без сбт?

Ответы [ 4 ]

11 голосов
/ 16 ноября 2011

Вы также можете использовать Typesafe xsbt-start-script-plugin (редактировать: сейчас sbt-start-script ) для генерации сценария оболочки с правильным путем к классу:

Этот плагин позволяет генерировать скрипт target/start для проект. Скрипт будет запускать проект «на месте» (не имея сначала создать пакет).

Сценарий target/start похож на sbt run, но не требует на SBT. sbt run не рекомендуется для производственного использования, потому что хранит SBT в памяти. target/start предназначен для запуска приложение в производстве.

Плагин добавляет задачу start-script, которая генерирует target/start. Также добавляется задача stage с псевдонимом для задачи start-script.

Это то, что Heroku использует для запуска приложений Scala.

3 голосов
/ 25 августа 2011

Я использовал retronym s sbt-onejar plugin для создания исполняемых jar-файлов со всеми включенными зависимостями (так же, как Assembly plugin для Maven). Это очень просто и хорошо задокументировано.

2 голосов
/ 25 августа 2011

Если вы хотите создать «толстый» jar-файл, содержащий все ваше приложение и ваши зависимости, вы можете использовать плагин sbt-assembly . Тогда вы можете запустить ваше приложение как стандарт jar без sbt.

1 голос
/ 27 августа 2011

Вы также можете создать задачу для создания файла для запуска приложения.@Kipton Barros опубликовал это в Как запустить основной класс sbt из оболочки как обычную программу командной строки? :

  val MkUnixlauncher = config("mkunixlauncher") extend(Compile)
  val mkunixlauncher = TaskKey[Unit]("mkunixlauncher")
  val mkunixlauncherTask = mkunixlauncher <<= (target, fullClasspath in Runtime) map { (target, cp) =>
    def writeFile(file: File, str: String) {
      val writer = new PrintWriter(file)
      writer.println(str)
      writer.close()
    }
    val cpString = cp.map(_.data).mkString(System.getProperty("path.separator"))
    val launchString = """
CLASSPATH="%s"
scala -usejavacp -Djava.class.path="${CLASSPATH}" "$@"
""".format(cpString)
    val targetFile = (target / "scala-sbt").asFile
    writeFile(targetFile, launchString)
    targetFile.setExecutable(true)
  }

Это создает файл с именем scala-sbt в вашемцелевой каталог, для которого правильно установлен classpath для запуска приложения.Твик по вкусу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...