Sbt 0.13 to 1.0 - 对于多项目,全局onLoad的替代是什么?

时间:2017-09-17 13:58:30

标签: scala sbt

我正在尝试创建一个新项目,这次使用的是sbt 1.0.2而不是0.13.x,我现在使用了很长时间。

我有一个与https://github.com/vmunier/akka-http-with-scalajs-example/blob/master/build.sbt

相当的多项目设置

我现在的问题是,当我尝试运行[error] (projectname/compile:bgRun) No main class detected.

时,始终获取sbt run

这是我当前的build.sbt文件:

lazy val generalSettings = Seq(
  name := "awesomeproject.tld",
  version := "0.1",
  scalaVersion := "2.12.3"
)

lazy val client = (project in file("modules/client"))
  .settings(generalSettings: _*)
  .settings(
    name := "client",
    libraryDependencies ++= Seq(
      "com.lihaoyi" %%% "scalatags" % "0.6.5",
      "org.scala-js" %%% "scalajs-dom" % "0.9.2"
    )
    , scalaJSUseMainModuleInitializer := true
  )
  .enablePlugins(ScalaJSPlugin, ScalaJSWeb)
  .dependsOn(sharedJS)

lazy val server = (project in file("modules/server"))
  .settings(generalSettings: _*)
  .settings(
    name := "server",
    scalaJSProjects := Seq(client),
    pipelineStages in Assets := Seq(scalaJSPipeline),
    // triggers scalaJSPipeline when using compile or continuous compilation
    //compile in Compile := ((compile in Compile) dependsOn scalaJSPipeline).value,
    WebKeys.packagePrefix in Assets := "public/",
    //managedClasspath in Runtime += (packageBin in Assets).value,
    libraryDependencies ++= Seq(
      "com.typesafe.akka" %% "akka-actor" % "2.5.4",
      "com.typesafe.akka" %% "akka-testkit" % "2.5.4" % Test,
      "com.typesafe.akka" %% "akka-stream" % "2.5.4",
      "com.typesafe.akka" %% "akka-stream-testkit" % "2.5.4" % Test,
      "com.typesafe.akka" %% "akka-http" % "10.0.10",
      "com.typesafe.akka" %% "akka-http-testkit" % "10.0.10" % Test,

      "ch.qos.logback" % "logback-classic" % "1.2.3",
      "com.typesafe.scala-logging" %% "scala-logging" % "3.7.2",

      "com.lihaoyi" %% "scalatags" % "0.6.5",
      "com.vmunier" %% "scalajs-scripts" % "1.1.0"
    )

    , mainClass := Some("tld.awesomeproject.Main")
  )
  .dependsOn(sharedJVM)

lazy val shared = (crossProject.crossType(CrossType.Pure) in file("modules/shared"))
  .settings(generalSettings: _*)
  .settings(
    name := "shared"
  )

lazy val sharedJS = shared.js
lazy val sharedJVM = shared.jvm

正如您所见,我尝试通过子项目中的mainClass := Some("tld.awesomeproject.Main")显式设置来解决问题。我还试图明确设置一个根项目,让它依赖于服务器,但没有运气。

我想这里的真正问题是,

onLoad in Global := (Command.command("project server", _: State)) compose (onLoad in Global)不再适用于sbt 1.0.2。

我检查了Command课程,但之后我并不聪明。根本没有更多的方法可以回馈一个州。

任何人都可以这样流下来吗?我想要的是运行一个向客户端发送一些javascript的服务器......这不应该是黑魔法,实际上一切都像我的0.13中的魅力一样。项目

1 个答案:

答案 0 :(得分:3)

这应该有效:

onLoad in Global ~= (_ andThen ("project server" :: _))

参考:https://github.com/sbt/sbt/issues/1224#issuecomment-331840364