【问题标题】:sbt compile takes very long time to completesbt compile 需要很长时间才能完成
【发布时间】:2016-07-30 17:11:56
【问题描述】:

我现在使用 Akka、Play 框架、Scala 运行一个相对较小的项目,构建工具是 SBT。但是,我已经建立了一个比这个更大的项目,而且它的构建速度非常快。但是现在经过一段时间后,我正在尝试构建我的项目,并且编译需要很长时间(总时间:904 s)。

> ~/nlp-search/code(branch:feature/demo-app-api*) » sbt compile         
> renienj@Rajani [info] Loading project definition from
> /Users/renienj/nlp-search/code/project [info] Set current project to
> nlp-search (in build file:/Users/renienj/nlp-search/code/) [info]
> Compiling 115 Scala sources and 1 Java source to
> /Users/renienj/nlp-search/code/target/scala-2.11/classes... [warn]
> /Users/renienj/nlp-search/code/app/api/parsedquery/ParsedQuery.scala:14:
> imported `format' is permanently hidden by definition of value format
> in object ParsedQuery [warn]   import Sentence.format [warn]          
> ^ [warn]
> /Users/renienj/nlp-search/code/app/api/parsedquery/Sentence.scala:14:
> imported `format' is permanently hidden by definition of value format
> in object Sentence [warn]   import Phrase.format [warn]               
> ^ [warn]
> /Users/renienj/nlp-search/code/app/api/parsedquery/Sentence.scala:15:
> imported `format' is permanently hidden by definition of value format
> in object Sentence [warn]   import  Filter.format [warn]              
> ^ [warn]
> /Users/renienj/nlp-search/code/app/api/parsedquery/Sentence.scala:16:
> imported `format' is permanently hidden by definition of value format
> in object Sentence [warn]   import Order.format [warn]               
> ^ [warn]
> /Users/renienj/nlp-search/code/app/backend/intelligenceServices/nlp/executor/StreamExecutor.scala:23:
> abstract type pattern OT is unchecked since it is eliminated by
> erasure [warn]     case x: OT => [warn]             ^ [warn]
> /Users/renienj/nlp-search/code/app/backend/intelligenceServices/merchRules/io/DAO.scala:27:
> method newTermName in trait Names is deprecated: Use TermName instead
> [warn]       String.valueOf(x.map(x => x.toChar)).unpickle[MerchRule]
> [warn]                                                    ^ [warn]
> /Users/renienj/nlp-search/code/app/backend/solrAccess/cache/SolrCacheProvider.scala:24:
> method newTermName in trait Names is deprecated: Use TermName instead
> [warn]       x.pickle.value [warn]         ^ [warn]
> /Users/renienj/nlp-search/code/app/backend/solrAccess/cache/SolrCacheProvider.scala:30:
> method newTermName in trait Names is deprecated: Use TermName instead
> [warn]       BinaryPickle(x).unpickle[DocumentList] [warn]            
> ^ [warn] there were 9 feature warnings; re-run with -feature for
> details [warn] 9 warnings found [success] Total time: 904 s, completed
> Apr 9, 2016 5:07:09 PM

我的 build.sbt :

name := """nlp-search"""

version := """3.0-RC1"""

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

scalaVersion := "2.11.7"

resolvers += Resolver.mavenLocal

val akkaVersion = "2.3.12"

libraryDependencies ++= Seq(
  "com.typesafe.akka"     %% "akka-actor"       % akkaVersion,
  "com.typesafe.akka"     %% "akka-contrib"     % akkaVersion,
  "com.typesafe.akka"     %% "akka-remote"      % akkaVersion,
  "com.typesafe.akka"     %% "akka-cluster"     % akkaVersion,
  "com.typesafe.akka"     %% "akka-testkit"     % akkaVersion,
  "org.apache.solr"       % "solr-solrj"        % "4.10.0",
  "org.apache.thrift"     % "libthrift"         % "0.9.2",
  "org.json"              % "json"              % "20080701",
  "org.skife.com.typesafe.config" % "typesafe-config" % "0.3.0",
  "net.debasishg"         %% "redisclient"      % "2.13",
  "org.scala-lang.modules" %% "scala-pickling"  % "0.10.0",
  "edu.stanford.nlp"      % "stanford-parser"   % "3.5.2",
  "edu.stanford.nlp" % "stanford-corenlp" % "3.5.2",
  "org.scalatest"         % "scalatest_2.11"    % "2.2.4" % "test",
  "com.kohls.search.qp"   % "api"               % "1.0.0",
  "com.typesafe.akka"     %% "akka-stream-experimental" % "1.0"
)

libraryDependencies += specs2 % Test

resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"

publishArtifact in (Compile, packageDoc) := false

publishArtifact in packageDoc := false

sources in (Compile,doc) := Seq.empty

我从早上开始就在挣扎。我真的不明白为什么要花这么长时间。

非常感谢您。

【问题讨论】:

  • 它是否包含大量动态生成 JSON 读取器和写入器的宏隐式?对我来说是个杀手。我缓存了隐式并将构建时间从 5 多分钟缩短到大约 30 秒。
  • 是的,我有 8 个隐式来生成复杂的 JSON。你能不能给我看一个样品来试试。你用过无形库吗?感谢您的评论。
  • 我正在使用 upickle 和 bsonpickle。我像这样预先计算和缓存我所有的隐式:object JsonSerialization { implicit lazy val userReader = { val userReader = (); macroR[User] }; … }
  • 你可能还想看看cachedImplicit in shapeless。
  • 非常感谢@Jean-PhilippePellet。你为什么不移动评论来回答,这样问题就完成了。

标签: scala playframework sbt akka typesafe-activator


【解决方案1】:

不是一个真正的答案,但可能是一个提示……如果您有很多由宏应用程序(通常是您自己的案例类的 JSON 读取器和写入器等)生成的隐式,编译可能会大大减慢。您可以尝试使用类似这样的方式自己缓存隐式(以 upickle 为例):

object JsonSerialization {
  implicit lazy val userReader = { val userReader = (); macroR[User] }
  implicit lazy val userWriter = { val userWriter = (); macroR[Writer] }
}

你可能还想看看 shapeless 的cachedImplicitthis question 中也提到过。

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多