【问题标题】:activator compile never completes / how to debug?激活器编译永远不会完成/如何调试?
【发布时间】:2016-09-10 23:50:33
【问题描述】:

我正在尝试构建一个 play 2.3.10 应用程序。有 329 个源文件,我无法让它完成构建。在“编译 329 个 Scala 源代码......”的异常(太)长时间没有进展之后,任务管理器开始显示高 CPU 使用率和过于规则的模式,这使得它看起来像 sbt(或过程)处于某种循环中。

我最近没有添加任何新库,所以不要立即看到依赖项可能发生了怎样的变化。我已经尝试过激活器清洁(并更新清洁)。我在 JAVA_OPTS 和 SBT_OPTS 中增加了内存大小。我已将 sbt 从 13.7 升级到 13.8,然后是 13.11。我已将 Scala 从 2.11.7 更新到 2.11.8,将 JDK 更新到 1.7.0_80。我已经重新克隆了这个项目。我试过更新激活器并删除了常春藤缓存。并重新启动:)。当我在 build.sbt 中 set logLevel := Level.Debug 并查看 sbt 的调试输出时,似乎没有任何异常,只是列出了类路径和其他变量,之后输出完全安静下来。

最后的输出是

[info] Done updating.
[info] Compiling 329 Scala sources and 1 Java source to ...\target\scala-2.11\classes...

该项目直到最近才成功构建。只添加了一个新视图、新控制器方法和新路由。

build.sbt 看起来或多或少是这样的:

name := """AppName"""

version := "1.050"

lazy val scalacOptions = Seq ("-feature")

lazy val root = (project in file(".")).enablePlugins(PlayScala).enablePlugins(SbtTwirl)

scalaVersion := "2.11.8"

javacOptions ++= Seq("-source", "1.7", "-target", "1.7")

libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  ws,
  "org.webjars" % "bootstrap" % "3.3.6",
  "org.webjars" %% "webjars-play" % "2.3.0-2",
  "org.webjars" % "handlebars" % "1.3.0",
  "org.webjars" % "typeaheadjs" % "0.10.5",
  "mysql" % "mysql-connector-java" % "5.1.38",
  "com.typesafe.play.plugins" %% "play-plugins-mailer" % "2.3.1",
  "com.github.nscala-time" %% "nscala-time" % "1.2.0",
  "org.webjars" % "jquery" % "1.9.0",
 "org.webjars" % "dustjs-linkedin" % "2.4.0-1",
  "org.webjars" % "tablesorter" % "2.15.5"11  
)

fork in run := true

使用激活器调试,显示以下 sbt 调试输出:

[info] Loading project definition from C:\Users\admin\Documents\workspace\AppName\project
[info] Set current project to AppName (in build file:/C:/Users/admin/Documents/workspace/AppName/)
[debug] > compile
[debug] Evaluating tasks: compile:compile
[debug] Running task... Cancel: Null, check cycles: false, forcegc: true
[debug] [naha]
[debug] [naha] Initial source changes:
[debug] [naha]  removed:Set()
[debug] [naha]  added: Set(C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\v
...
scala, C:\Users\admin\Documents\workspace\AppName\app\controllers\MeasureActivities.scala, C:\Users\admin\Documents\workspace\AppName\app\models\OrganisationType.scala)
[debug] [naha]  modified: Set()
[debug] [naha] Invalidated products: Set()
[debug] [naha] External API changes: API Changes: Set()
[debug] [naha] Modified binary dependencies: Set()
[debug] [naha] Initial directly invalidated sources: Set(C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\school\runs.template.scala, C:\Users\admin\Documents\workspace\AppName\app\models\LearningItem.scala, C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\user\noAccess.template.scala, 
...
C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\tag\list.template.scala, C:\Users\admin\Documents\workspace\AppName\app\models\SyncAction.scala, C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\province\list.template.scala, C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\apiConsumer\form.template.scala, C:\Users\admin\Documents\workspace\AppName\app\controllers\MeasureActivities.scala, C:\Users\admin\Documents\workspace\AppName\app\models\OrganisationType.scala)
[debug] [naha]
[debug] [naha] Sources indirectly invalidated by:
[debug] [naha]  product: Set()
[debug] [naha]  binary dep: Set()
[debug] [naha]  external source: Set()
[debug] All initially invalidated sources: Set(C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\school\runs.template.scala, C:\Users\admin\Documents\workspace\AppName\app\models\LearningItem.scala,
...
C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\tag\list.template.scala, C:\Users\admin\Documents\workspace\AppName\app\models\SyncAction.scala, C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\province\list.template.scala, C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\twirl\main\views\html\apiConsumer\form.template.scala, C:\Users\admin\Documents\workspace\AppName\app\controllers\MeasureActivities.scala, C:\Users\admin\Documents\workspace\AppName\app\models\OrganisationType.scala)
[debug] [naha] Recompiling all 330 sources: invalidated sources (330) exceeded 50.0% of all sources
[info] Compiling 329 Scala sources and 1 Java source to C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\classes...
[debug] Getting org.scala-sbt:compiler-interface:0.13.11:component from component compiler for Scala 2.11.8
[debug] Getting org.scala-sbt:compiler-interface:0.13.11:component from component compiler for Scala 2.11.8
[debug] Running cached compiler 4d0e0074, interfacing (CompilerInterface) with Scala compiler version 2.11.8
[debug] Calling Scala compiler with arguments  (CompilerInterface):
[debug]         -deprecation
[debug]         -unchecked
[debug]         -encoding
[debug]         utf8
[debug]         -bootclasspath
[debug]         C:\Program Files\Java\jdk1.7.0_80\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_80\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_80\jre\classes;C:\Users\admin\.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.11.8.jar
[debug]         -classpath
[debug]         C:\Users\admin\Documents\workspace\AppName\target\scala-2.11\classes;C:\Users\admin\.ivy2\cache\com.typesafe.play\twirl-api_2.11\jars\twirl-api_2.11-1.1.1.jar;C:\Users\admin\.ivy2\cache\org.apache.commons\commons-lang3\jars\commons-lang3-3.4.jar;C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar;C:\Users\admin\.ivy2\cache\com.typesafe.play\play_2.11\jars\play_2.11-2.3.10.jar;C:\Users\admin\.ivy2\cache\com.typesafe.play\build-link\jars\build-link-2.3.10.jar;C:\Users\admin\.ivy2\cache\com.typesafe.play\play-exceptions\jars\play-exceptions-2.3.10.jar;
...
C:\Users\admin\.ivy2\cache\org.bouncycastle\bcprov-jdk14\jars\bcprov-jdk14-1.38.jar;C:\Users\admin\.ivy2\cache\org.bouncycastle\bcmail-jdk14\jars\bcmail-jdk14-1.38.jar;C:\Users\admin\.ivy2\cache\org.xhtmlrenderer\flying-saucer-core\jars\flying-saucer-core-9.0.7.jar;C:\Users\admin\.ivy2\cache\nu.validator.htmlparser\htmlparser\bundles\htmlparser-1.4.jar;C:\Users\admin\.ivy2\cache\log4j\log4j\bundles\log4j-1.2.17.jar

使用 scalacOptions 的 -verbose 设置,会产生大量编译器消息,并且在这些行之后停止输出:

...
[info] [loaded class file C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar(scala/xml/Text.class) in 2ms]
[info] [loaded class file C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar(scala/xml/Atom.class) in 2ms]
[info] [loaded class file C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar(scala/xml/SpecialNode.class) in 2ms]
[info] [loaded class file C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar(scala/xml/pull/package.class) in 2ms]
[info] [loaded package loader pull in 6ms]
[info] [loaded class file C:\Users\admin\.ivy2\cache\org.scala-lang.modules\scala-xml_2.11\bundles\scala-xml_2.11-1.0.1.jar(scala/xml/pull/XMLEvent.class) in 2ms]
[info] [loaded class file C:\Users\admin\.ivy2\cache\com.typesafe.play\play_2.11\jars\play_2.11-2.3.10.jar(views/html/helper/textarea.class) in 1ms]

这似乎不太可能,尽管我猜这个问题可能与textarea.class有关...

sbt 是否检测并解决循环依赖?任何有关故障排除过程的指导将不胜感激。

【问题讨论】:

  • 好的,发现项目中的一个 sbt 文件的日志级别设置为警告,这是覆盖。所以现在我得到了更多的输出,希望能看到一些东西。任何线索或指导仍然非常感谢。
  • 不,即使调试级别的输出在上述之后也没有显示任何内容。
  • 你能把你的 sbt 日志贴在某个地方吗?你的项目在 vcs 下是 git 还是类似的?你能发布你的 build.sbt 吗?
  • @Teliatko - 感谢您的评论/问题 - 添加了简短的调试日志和 build.sbt。
  • 好像和刚刚添加的视图代码语法错误有关。不知何故,编译器陷入困境并且没有返回 - 至少目前看起来是这样。仍在进行故障排除。

标签: playframework sbt


【解决方案1】:

本例中的问题是视图源代码中的语法错误。但是 Eclipse 无法显示它(可能遭受相同的未完成编译),并且 scala 编译器没有返回,因此很难追踪。

【讨论】:

  • 很好,这也是我的想法,通过提交返回并找出导致循环的原因。顺便提一句。永远不要相信任何 IDE,而 scala 工具仍然是使用 scala 最薄弱的部分。命令行和 SBT 是你最好的朋友。很高兴你已经离得这么近了。
  • @Teliatko Tks 用于输入。虽然令人沮丧 - 根本没有迹象表明出了什么问题。再次感谢。
猜你喜欢
  • 2023-04-08
  • 2016-07-13
  • 2017-12-17
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2013-06-18
相关资源
最近更新 更多