Я пытаюсь создать многомодульное приложение и запустить один из его модулей отдельно от других (с другой машины). Структура проекта выглядит так:
main
/ \
module1 module2
Я хочу запустить модуль1 как отдельный файл jar (или есть лучший способ сделать это?), который я буду запускать с другого компьютера (я хочу подключить его к основному приложению с помощью удаленного взаимодействия Akka).
Что я делаю:
- Запуск команды "play dist"
- Распаковка module1.zip из универсальной папки
- Установка режима +x для исполняемого файла bin/module1.
- Установка моего основного класса (вставьте его ниже): вместо
play.core.server.NettyServer
я помещаю свой основной класс:declare -r app_mainclass="module1.foo.Launcher"
- Запуск с внешним файлом application.conf.
Вот мой основной класс:
class LauncherActor extends Actor {
def receive = {
case a => println(s"Received msg: $a ")
}
}
object Launcher extends App {
val system = ActorSystem("testsystem")
val listener = system.actorOf(Props[LauncherActor], name = "listener")
println(listener.path)
listener ! "hi!"
println("Server ready")
}
Вот вывод консоли:
@pavel bin$ ./module1 -Dconfig.file=/Users/pavel/projects/foobar/conf/application.conf
[WARN] [10/18/2013 18:56:03.036] [main] [EventStream(akka://testsystem)] [akka.event-handlers] config is deprecated, use [akka.loggers]
akka://testsystem/user/listener
Server ready
Received msg: hi!
@pavel bin$
Таким образом, система отключается, как только доходит до последней строки основного метода. Если я запускаю этот код без Play - он работает, как и ожидалось, объект загружается и ожидает сообщений, что является ожидаемым поведением.
Может я что-то не так делаю? Или я должен установить некоторые параметры в исполняемом файле module1? Другие идеи?
Заранее спасибо!
Обновление: Версии:
- Скала — 2.10.3
- Играть в! - 2.2.0
- СБТ - 0.13.0
- Акка — 2.2.1
- Java 1.7 и 1.6 (пробовал обе)
Свойства сборки:
lazy val projectSettings = buildSettings ++ play.Project.playScalaSettings ++ Seq(resolvers := buildResolvers,
libraryDependencies ++= dependencies) ++ Seq(scalacOptions += "-language:postfixOps",
javaOptions in run ++= Seq(
"-XX:MaxPermSize=1024m",
"-Xmx4048m"
),
Keys.fork in run := true)
lazy val common = play.Project("common", buildVersion, dependencies, path = file("modules/common"))
lazy val root = play.Project(appName, buildVersion, settings = projectSettings).settings(
resolvers ++= buildResolvers
).dependsOn(common, module1, module2).aggregate(common, module1, module2)
lazy val module1 = play.Project("module1", buildVersion, path = file("modules/module1")).dependsOn(common).aggregate(common)
lazy val module2: Project = play.Project("module2", buildVersion, path = file("modules/module2")).dependsOn(common).aggregate(common)