Могу ли я использовать оба в своем проекте?
Раньше у меня был только объект, расширяющий черту App
, но поскольку я начал использовать Microkernel
, мне нужно иметь класс, расширяющий черту Bootable
.
Допустим, у меня есть что-то вроде этого:
lazy val backend = (project in file("backend"))
.enablePlugins(AkkaAppPackaging)
.enablePlugins(UniversalPlugin)
.settings(
name := "backend",
mainClass in Compile := Some("backend.Backend"),
libraryDependencies ++= Dependencies.backend,
javaOptions in run ++= Seq("-Djava.library.path=./sigar"),
fork in run := true)
.dependsOn(api)
.aggregate(api)
и класс Backend следующим образом:
class Backend extends Bootable {
val system = ActorSystem("mobile-cluster")
def startup() = {
FactorialBackend startOn system
}
def shutdown() = {
system.shutdown()
}
}
Я не могу запустить приложение с sbt run
(есть ошибка об отсутствии статического основного метода), но оно работает с Microkernel, когда я запускаю sbt stage
и при следующем запуске приложения использую сгенерированный скрипт, он работает нормально.
Когда я использую что-то вроде этого:
object Backend extends App {
val system = ActorSystem("application")
FactorialBackend startOn system
}
Я могу запустить приложение с sbt "project backend" "run"
, но микроядро больше не работает.
Что я могу с этим сделать? Должен ли я иметь отдельные файлы для запуска приложения с Microkernel и sbt или отдельные конфигурации сборки?
Мне нужна производственная версия приложения с использованием Microkernel, и я также хочу просто запускать и отлаживать свое приложение во время разработки с использованием sbt.
Я пытался использовать один и тот же класс или объект, расширяющий черты App и Bootable, или настроить sbt.build для отдельной конфигурации для Microkernel и sbt run
, но это не помогло.