我正在尝试创建一个多模块应用程序并将其中一个模块与其他模块分开运行(来自另一台机器)。项目结构如下所示:
main
/ \
module1 module2
我想将 module1 作为单独的 jar 文件运行(或者有更好的方法吗?),我将从另一台机器上运行(我想使用 Akka 远程处理将它连接到主应用程序)。
我在做什么:
- 运行“播放 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$
因此,系统在到达 main 方法的最后一行时立即关闭。如果我在没有 Play 的情况下运行此代码 - 它按预期工作,加载对象并等待消息,这是预期的行为。
也许我做错了什么?或者我应该在 module1 可执行文件中设置一些选项?其他想法?
提前致谢!
更新:版本:
- 斯卡拉 - 2.10.3
- 玩!- 2.2.0
- SBT - 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)