Почему sbt-native-packager не создает каталог bin?

Сегодня я интегрировал sbt-native-packager в свой проект scala, в основном для создания удобных сценариев выполнения и/или пакетов.

Теперь я добавил к своей строке build.sbt:

packageArchetype.java_application

и моему plugins.sbt

resolvers += "sbt-plugins" at "http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.7.0-RC2")

когда я вызываю sbt stage, я получаю каталог target/universal/stage, но там только lib, нет bin со скриптами (которые согласно http://www.scala-sbt.org/sbt-native-packager/GettingStartedApplications/MyFirstProject.html должен быть создан).

Нужно ли мне добавить что-то еще, чтобы получить каталог bin со скриптами?


person Andna    schedule 14.05.2014    source источник
comment
Я пришел к этому вопросу, когда искал, как развернуть приложение Lagom. Ответ на развертывание приложения Lagom здесь: сборка без основного атрибута манифеста"> stackoverflow.com/questions/27858758/   -  person Christian Vielma    schedule 28.07.2017


Ответы (2)


Проблема заключалась в том, что в моем проекте у меня было несколько основных классов. В build.sbt у меня было:

Keys.mainClass in (Compile, run) := Some("Rest")

что должно быть

Keys.mainClass in (Compile) := Some("Rest")

и теперь он работает отлично.

person Andna    schedule 14.05.2014
comment
Это хорошо, спасибо. Я добавил в свой проект библиотеку jdom, в которой есть основные классы, и получил загадочную поломку. Предупреждение от sbt-native-packager было бы неплохо. - person Adam Mackler; 25.07.2014
comment
Мне пришлось добавить область Compile для ключа mainClass, чтобы сгенерировать скрипт bin в проекте packageArchetype.java_server - person Stanislav Savulchik; 11.08.2014
comment
У меня тоже была эта пробема; определено mainClass in (Compile, run) := Some("foo") вместо mainClass in (Compile) := Some("foo"). Это стандартное ожидаемое поведение SBT или это похоже на ошибку в sbt-native-packager? - person metasim; 30.01.2015
comment
Это интересный вопрос. Я не исследовал эту проблему после того, как решил ее. У вас возникла такая же проблема с новейшей версией sbt-native-packager? - person Andna; 01.02.2015
comment
Работает и для упаковки докеров - person Felipe; 04.07.2016

Кстати, изменение конфигурации mainClass влияет на запуск приложения внутри sbt. Чтобы настроить вашу сборку как для запуска приложения в sbt (например, во время разработки), так и для создания пакетов, вам понадобятся 2 определения mainClass (в build.sbt):

mainClass in Compile := Some("MyBootKernel")

mainClass in (Compile, run) := Some("MyApp")

Где 2 основных класса:

class MyBootKernel extends Bootable {
  def startup = { MyApp.main(Array()) }
  def shutdown = {}
}

а также

object MyApp extends App {
    // initialize application.
}

Сценарий запуска в каталоге bin передает основной класс приложения в микроядро akka, которое должно расширять Bootable (которое затем инициализирует приложение), в то время как запуск из sbt напрямую не требует загрузочных материалов (т.е. только приложение напрямую).

person Brett    schedule 20.02.2015