【问题标题】:hot swap in sbt project without play-plugin没有播放插件的 sbt 项目中的热插拔
【发布时间】:2017-10-03 19:11:05
【问题描述】:

我在使用play框架的时候,每次修改代码都会重新编译代码自动生效。

但是,当我使用 sbt 运行一个没有 play-plugin 的项目时,它不会生效。

我想知道是否有办法让 sbt 项目热交换更改的代码。

我的 build.sbt 如下:

version in ThisBuild := "1.0-SNAPSHOT"

scalaVersion in ThisBuild := "2.11.6"

lazy val `frontend` = (project in file("frontend")).
  enablePlugins(PlayScala).
  enablePlugins(DockerPlugin).
  settings(
    name := "frontend",
    libraryDependencies ++= Dependencies.frontend
  ).dependsOn(`api`).aggregate(`api`)

lazy val `backend` = (project in file("backend")).
  enablePlugins(JavaAppPackaging).
  enablePlugins(DockerPlugin).
  settings(
    name := "backend",
    libraryDependencies ++= Dependencies.backend ++ Seq(cache, ws)
  ).dependsOn(`api`).aggregate(`api`)

lazy val `api` = (project in file("api")).
  settings(
    name := "api",
    libraryDependencies += ws
  )

我在 intellij idea 中配置的内容就像下面的 sbt 任务(我现在不能发布图片):

"project backend" ~run

但是,每次我在后端更改代码,在我从前端调用后端后,它就不会生效。

我想知道如何解决这个问题。感谢你们的帮助。

【问题讨论】:

    标签: scala playframework sbt


    【解决方案1】:

    你可以像这样调用 sbt 来自动重新编译任何更改: sbt ~compile

    【讨论】:

    • 是的,我知道这一点。但是,我想要的是我的程序继续运行,即类似于sbt ~run。但是当我这样做时,程序只是一直在等待编译。它没有运行。
    • 所以您希望每次更改代码中的某些内容时,重新编译所有内容并自动重新启动整个内容?
    【解决方案2】:

    如果您使用 ~run,每次更改都会编译更改的类并再次重新运行项目。 如果它不起作用,您可以详细说明您的项目和结构。

    【讨论】:

    • 它不起作用。我已将 build.sbt 添加到问题中。感谢您的热情回复。
    • 前端和后端之间没有依赖关系吗?我的意思是 api 后端和前端都依赖于 api 但前端和后端之间没有依赖关系?都是sbt文件吗?如果是,那么我认为您没有使用依赖注入。如果您从前端到后端建立依赖关系,然后使用 ~run 运行前端应该可以解决您的问题。
    • 这是所有的 sbt 文件...而且我不希望前端依赖于后端,这样无论我对后端做了什么,前端都不需要改变。并感谢您耐心的回答。我明白为什么它不适用于我的项目。
    • 顺便说一下,我正在使用akka actor连接前端和后端。所以前后不需要有任何依赖关系。
    【解决方案3】:

    打开两个 SBT 窗口。
    一个运行~compile,另一个运行~run。 希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 2014-02-19
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多