Sbt 构建挂在随机阶段
Sbt build hangs on random stages
我有一个多项目 sbt 构建,它在执行的不同阶段挂起(在编译一个或多个模块之后)。
如能提供有关其挂起的可能原因的任何意见,我将不胜感激。
为了提供上下文,此 构建包含三个模块:
- 前端:scala.js模块
- 后端:akka-http
中的网络服务器
- 模型:模型和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 值)。
欢迎任何suggestions/advices。
Scala.js 非常耗费内存,作为对编译时间的权衡。 1GB对于一个典型的项目来说肯定是不够的。
开始sbt我推荐至少-Xmx3G
,有能力的话4G。
请注意,直接在你的项目中源文件的数量不是很优雅。您所有的传递依赖项都计入使用的总内存,因为它们需要加载到内存中才能与您的项目链接在一起。
原来不是内存问题而是库问题。在此构建中 upickle
库用于共享模块中的 json 序列化:
"com.lihaoyi" %%% "upickle" % "0.5.1"
根据用法,该库似乎使用 宏 来生成 serialization/deserialization 机制。一旦我迁移到
"com.github.benhutchison" %%% "prickle" % "1.1.13"
构建能够在没有太多内存的情况下在几秒钟内完成 - 大约 -Xmx1G
。我将尝试减少示例并将问题提交给 github。
将日志级别设置为调试可能会有所帮助,比如
logLevel := Level.Debug
如所述here,例如
我有一个多项目 sbt 构建,它在执行的不同阶段挂起(在编译一个或多个模块之后)。
如能提供有关其挂起的可能原因的任何意见,我将不胜感激。
为了提供上下文,此 构建包含三个模块:
- 前端:scala.js模块
- 后端:akka-http 中的网络服务器
- 模型:模型和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 值)。
欢迎任何suggestions/advices。
Scala.js 非常耗费内存,作为对编译时间的权衡。 1GB对于一个典型的项目来说肯定是不够的。
开始sbt我推荐至少-Xmx3G
,有能力的话4G。
请注意,直接在你的项目中源文件的数量不是很优雅。您所有的传递依赖项都计入使用的总内存,因为它们需要加载到内存中才能与您的项目链接在一起。
原来不是内存问题而是库问题。在此构建中 upickle
库用于共享模块中的 json 序列化:
"com.lihaoyi" %%% "upickle" % "0.5.1"
根据用法,该库似乎使用 宏 来生成 serialization/deserialization 机制。一旦我迁移到
"com.github.benhutchison" %%% "prickle" % "1.1.13"
构建能够在没有太多内存的情况下在几秒钟内完成 - 大约 -Xmx1G
。我将尝试减少示例并将问题提交给 github。
将日志级别设置为调试可能会有所帮助,比如
logLevel := Level.Debug
如所述here,例如