2015-01-29 4 views
3

Могу ли я использовать оба в моем проекте?Запуск приложения с sbt и Akka Microkernel

Раньше у меня был объект только 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 больше не работает.

Что я могу сделать с этим? Должен ли я иметь отдельные файлы для запуска приложения с Microkernel и sbt или отдельными конфигурациями сборки?

Мне нужна рабочая версия приложения с использованием Microkernel, и я также хочу просто запустить и отладить мое приложение во время разработки с помощью sbt.

Я попытался использовать один и тот же класс или объект, расширяющий оба атрибута App и Bootable, или настроить sbt.build, чтобы иметь отдельную конфигурацию для Microkernel и sbt run, но это не помогло.

ответ

0

Одно из решений заключается в создании еще один модуль, поставить там загрузочный класс и добавить дополнительную конфигурацию сборки:

lazy val backend = (project in file("backend")) 
    .settings(
    name := "backend", 
    libraryDependencies ++= Dependencies.backend, 
    javaOptions in run ++= Seq("-Djava.library.path=./sigar"), 
    // this enables custom javaOptions 
    fork in run := true) 
    .dependsOn(api) 
    .aggregate(api) 

lazy val boot = (project in file("boot")) 
    .enablePlugins(AkkaAppPackaging) 
    .enablePlugins(UniversalPlugin) 
    .settings(
    name := "boot", 
    mainClass in Compile := Some("com.example.Boot"), 
    libraryDependencies ++= Dependencies.backend, 
    // this enables custom javaOptions 
    fork in run := true) 
    .dependsOn(backend) 
    .aggregate(api, backend) 

Прямо сейчас я могу запустить

sbt "project backend" "run" 

и

sbt "project boot" "stage" 
+0

Это хорошее решение. Я сначала, хотя из сопутствующего объекта, расширяющего ваш «загрузочный» класс с помощью «App», и просто запускает метод «startup», что является прекрасным решением, если в разделе загрузки не так много. Кстати, спасибо за попытку моего активатора :) – Muki

0

I не думайте, что вам нужны 2 модуля.

вы можете запустить микроядра с помощью следующей команды

SBT "Проект" бэкэнд "обкатываются главный akka.kernel.Main Backend"

0

Выполните эти инструкции по SBT консоли:

runMain akka.kernel.Main Backend 

 Смежные вопросы

  • Нет связанных вопросов^_^