3

我可以在我的项目中使用两者吗?

以前我只有对象扩展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)

和这样的后端类:

class Backend extends Bootable {

      val system = ActorSystem("mobile-cluster")

      def startup() = {
        FactorialBackend startOn system
      }

      def shutdown() = {
        system.shutdown()
      }
    }

我无法启动应用程序sbt run(缺少静态主方法时出错),但它适用于微内核,当我运行sbt stage并使用生成的脚本下次启动应用程序时它工作正常。

当我使用这样的东西时:

object Backend extends App {

      val system = ActorSystem("application")

      FactorialBackend startOn system
    } 

我可以使用 启动应用程序sbt "project backend" "run",但微内核不再起作用。

我能用它做什么?我应该有单独的文件来使用微内核和 sbt 启动应用程序还是单独的构建配置?

我需要使用微内核的应用程序的生产版本,并且我还想在使用 sbt 的开发过程中运行和调试我的应用程序。

我尝试使用相同的类或对象来扩展 App 和 Bootable 特征或配置 sbt.build 以对 Microkernel 和 进行单独配置sbt run,但这没有帮助。

4

3 回答 3

0

我认为您不需要 2 个模块。

您可以使用以下命令运行微内核

sbt "项目后端" "运行主 akka.kernel.Main 后端"

于 2015-03-12T17:34:34.537 回答
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"
于 2015-01-29T22:50:34.800 回答
0

通过 sbt 控制台执行这些指令:

runMain akka.kernel.Main Backend
于 2015-06-28T18:26:32.980 回答