【发布时间】:2018-07-08 19:44:41
【问题描述】:
我有一个多项目 sbt 构建,它挂在其执行的不同阶段(在编译一个或多个模块之后)。
如果您能就其挂起的可能原因提供任何意见,我将不胜感激。
为了给出一个上下文,这个构建包含三个模块:
- 前端:scala.js 模块
- 后端:akka-http 中的网络服务器
- model:models和json序列化器的共享代码
build.sbt文件:
name := "my-project"
version := "0.1"
scalaVersion := "2.12.4"
lazy val `my-project` = (project in file(".")).aggregate(backend, frontend, modelJvm, modelJs)
lazy val backend =
(project in file("backend"))
.dependsOn(modelJvm)
.settings(
libraryDependencies ++= Seq(
"com.lihaoyi" %% "upickle" % "0.5.1",
"com.typesafe.akka" %% "akka-http" % "10.0.11"
),
resourceGenerators in Compile += Def.task {
val f1 = (fastOptJS in Compile in frontend).value
val f2 = (packageScalaJSLauncher in Compile in frontend).value
Seq(f1.data, f2.data)
}.taskValue,
watchSources ++= (watchSources in frontend).value
)
lazy val frontend =
(project in file("frontend"))
.enablePlugins(ScalaJSPlugin)
.settings(
scalaJSUseMainModuleInitializer := true,
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "scalatags" % "0.6.7",
"org.scala-js" %%% "scalajs-dom" % "0.9.2"
)
)
.dependsOn(modelJs)
lazy val model = (crossProject.crossType(CrossType.Pure) in file("model"))
.settings(
libraryDependencies ++= Seq(
"com.lihaoyi" %%% "upickle" % "0.5.1"
)
)
lazy val modelJs = model.js
lazy val modelJvm = model.jvm
plugins.sbt文件:
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.22")
addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
build.properties:
sbt.version = 1.1.0
构建过程示例:
[info] Compiling 7 Scala sources to .../backend/target/scala-2.12/classes ...
[info] Compiling 8 Scala sources to ...frontend/target/scala-2.12/classes ...
[warn] there was one deprecation warning (since 0.6.20); re-run with -deprecation for details
[warn] one warning found
[info] Done compiling.
之后 sbt 没有响应。我在任务管理器和 jvisualvm 中看到,与此构建对应的 java 进程消耗了所有分配给它的内存(Xmx 值)。
欢迎提出任何建议/意见。
【问题讨论】:
-
您确定它实际上是在挂起,而不是仅仅需要很长时间吗?甚至在您提到 Xmx 之前,我的猜测是链接器内存不足,当链接器达到该限制时,它会真的缓慢运行。你分配了多少内存? Scala.js 可能需要相当多的良好编译/链接性能...
-
我尝试了使用 -Xmx1G 和 -mem 3000 的多个选项。根据 libvisualvm,我在 5-10 分钟内完成了这些选项。整个项目的长度小于 30 个文件,所以我没想到会出现这种行为。