Scala sbt有时需要很长时间编译(超长…)

Scala sbt有时需要很长时间编译(超长…),scala,playframework,sbt,slick,Scala,Playframework,Sbt,Slick,目前,我正在使用Play框架和sbt/scala运行一个相当中等规模的项目。然而,有时编译项目需要很长的时间,比如4个类需要120秒,而项目大部分时间只需要几秒钟! 然而,在重构数据库访问和服务中的某些内容时,在创建没有返回代码的光滑代码的私有/公共函数时,一堆文件似乎需要更长的时间 还有什么可以反对的吗 看起来sbt在执行以下操作时挂起: [info] Loading project definition from /Users/schmitch/projects/envisia/envisi

目前,我正在使用Play框架和sbt/scala运行一个相当中等规模的项目。然而,有时编译项目需要很长的时间,比如4个类需要120秒,而项目大部分时间只需要几秒钟! 然而,在重构数据库访问和服务中的某些内容时,在创建没有返回代码的光滑代码的私有/公共函数时,一堆文件似乎需要更长的时间

还有什么可以反对的吗

看起来sbt在执行以下操作时挂起:

[info] Loading project definition from /Users/schmitch/projects/envisia/envisia-erp-loki/project
[info] Set current project to envisia-erp-loki (in build file:/Users/schmitch/projects/envisia/envisia-erp-loki/)
[info] Compiling 4 Scala sources to /Users/schmitch/projects/envisia/envisia-erp-loki/modules/utils/target/scala-2.11/classes...
而utils是一个sbt子项目。知道为什么要花这么长时间吗?大多数情况下,这种情况只是偶尔发生

这是我的sbt文件:

name := "envisia-erp-loki"

version := "1.0.1-SNAPSHOT"

lazy val utils = project in file("modules/utils")

lazy val migrator = (project in file("modules/migrator"))
  .enablePlugins(PlayScala).disablePlugins(PlayLayoutPlugin)
  .dependsOn(utils).aggregate(utils)

lazy val codegen = (project in file("modules/codegen"))
  .dependsOn(utils).aggregate(utils)

lazy val auth = (project in file("modules/auth"))
  .enablePlugins(PlayScala).disablePlugins(PlayLayoutPlugin)
  .dependsOn(utils).aggregate(utils)

lazy val pdfgen = project in file("modules/pdfgen")

lazy val root = (project in file("."))
  .enablePlugins(PlayScala, DebianPlugin)
  .dependsOn(utils).aggregate(utils)
  .dependsOn(auth).aggregate(auth)
  .dependsOn(pdfgen).aggregate(pdfgen)

scalaVersion in ThisBuild := "2.11.6"


libraryDependencies ++= Seq(
  filters,
  cache,
  ws,
  specs2 % Test,
  "com.typesafe.play" %% "play-slick" % "1.0.0",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.0.0",
  "com.typesafe.play" %% "play-mailer" % "3.0.1",
  "org.elasticsearch" % "elasticsearch" % "1.5.2",
  "org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
  "com.chuusai" %% "shapeless" % "2.2.0",
  "com.nulab-inc" %% "play2-oauth2-provider" % "0.15.0",
  "io.github.nremond" %% "pbkdf2-scala" % "0.4",
  "com.google.code.findbugs" % "jsr305" % "3.0.0"
)


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


resolvers ++= Seq(
  Resolver.sonatypeRepo("releases"),
  Resolver.sonatypeRepo("snapshots")
)

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

publishArtifact in(Compile, packageDoc) := false

// "com.googlecode.java-diff-utils" % "diffutils" % "1.3.0"

//pipelineStages := Seq(rjs)

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator

JsEngineKeys.engineType := JsEngineKeys.EngineType.Node


// Do not add API Doc
sources in(Compile, doc) := Seq.empty

publishArtifact in(Compile, packageDoc) := false

// RpmPlugin
maintainer in Linux := "Christian Schmitt <c.schmitt@envisia.de>"

packageSummary in Linux := "Envisia ERP Server 3.0"

packageDescription := "This is the new Envisia ERP Server it will be as standalone as possible"

import com.typesafe.sbt.packager.archetypes.ServerLoader.Systemd

serverLoading in Debian := Systemd


scalacOptions in ThisBuild ++= Seq(
  "-target:jvm-1.8",
  "-encoding", "UTF-8",
  "-deprecation", // warning and location for usages of deprecated APIs
  "-feature", // warning and location for usages of features that should be imported explicitly
  "-unchecked", // additional warnings where generated code depends on assumptions
  "-Xlint", // recommended additional warnings
  "-Ywarn-adapted-args", // Warn if an argument list is modified to match the receiver
  "-Ywarn-value-discard", // Warn when non-Unit expression results are unused
  "-Ywarn-inaccessible",
  "-Ywarn-dead-code"
)

updateOptions in ThisBuild := updateOptions.value.withCachedResolution(true)
name:=“envisia erp loki”
版本:=“1.0.1-快照”
lazy val utils=文件中的项目(“模块/utils”)
lazy val migrator=(文件中的项目(“模块/migrator”))
.enablePlugins(PlayScala).disablePlugins(PlayLayoutPlugin)
.dependsOn(utils).聚合(utils)
lazy val codegen=(文件中的项目(“模块/codegen”))
.dependsOn(utils).聚合(utils)
lazy val auth=(文件中的项目(“模块/auth”))
.enablePlugins(PlayScala).disablePlugins(PlayLayoutPlugin)
.dependsOn(utils).聚合(utils)
lazy val pdfgen=文件中的项目(“模块/pdfgen”)
lazy val root=(文件中的项目(“.”)
.enablePlugins(PlayScala、DebianPlugin)
.dependsOn(utils).聚合(utils)
.dependsOn(auth).聚合(auth)
.dependsOn(pdfgen).聚合(pdfgen)
此版本中的ScalarAversion:=“2.11.6”
libraryDependencies++=Seq(
过滤器,
隐藏物
ws,
规格2%测试,
“com.typesafe.play”%%“play slick”%%“1.0.0”,
“com.typesafe.play”%%“play slick evolutions”%%“1.0.0”,
“com.typesafe.play”%%“play mailer”%%“3.0.1”,
“org.elasticsearch”%“elasticsearch”%“1.5.2”,
“org.postgresql”%“postgresql”%“9.4-1201-jdbc41”,
“com.chuusai”%%“不成形”%%“2.2.0”,
“com.nulab公司”%%“play2-oauth2-provider”%%“0.15.0”,
“io.github.nremond”%%“pbkdf2 scala”%%“0.4”,
“com.google.code.findbugs”%”jsr305“%”3.0.0”
)
分解器+=“scalaz bintray”athttp://dl.bintray.com/scalaz/releases"
分解器+++=Seq(
Solver.sonatypeRepo(“发行”),
解析程序。sonatypeRepo(“快照”)
)
//更快的编译:
中的源(编译,文档):=Seq.empty
publishArtifact in(Compile,packageDoc):=false
//“com.googlecode.java diff-utils”%“diffutils”%“1.3.0”
//管道级:=序号(rjs)
//Play提供了两种类型的路由器,一种是希望其动作被注入,另一种是
//另一种是遗留样式,静态访问其操作。
routesGenerator:=InjectedRoutesGenerator
JsEngineKeys.engineType:=JsEngineKeys.engineType.Node
//不添加API文档
中的源(编译,文档):=Seq.empty
publishArtifact in(Compile,packageDoc):=false
//RpmPlugin
Linux中的维护者:=“Christian Schmitt”
Linux中的packageSummary:=“Envisia ERP Server 3.0”
packageDescription:=“这是新的Envisia ERP服务器,它将尽可能独立”
导入com.typesafe.sbt.packager.archetypes.ServerLoader.Systemd
Debian中的服务器加载:=Systemd
此构建中的scalacOptions++=Seq(
“-目标:jvm-1.8”,
“-编码”,“UTF-8”,
“-deprecation”、//不推荐使用的API的警告和使用位置
“-feature”、//应明确导入的功能用法的警告和位置
“-unchecked”,//生成的代码取决于假设的其他警告
“-Xlint”,//建议的其他警告
“-Ywarn adapted args”,//修改参数列表以匹配接收方时发出警告
“-Ywarn value discard”,//未使用非单位表达式结果时发出警告
“-Ywarn不可访问”,
“-Ywarn死代码”
)
此生成中的updateOptions:=updateOptions.value.withCachedResolution(true)

您能给我们看一下您的sbt文件吗?有任何依赖关系吗?最后我有类似的问题,但在实际构建任务修复问题之前运行sbt clean。如果你正在运行Intellij,你可以简单地将它添加到run config中,@Peant我添加了我的sbt,但是它主要挂在UTIL上,而其他项目运行良好。在utils中,我手动插入使用slick codegen生成的数据库表文件,这是一个类似6k loc的大文件。但是,即使不更新它,只更新表文件使用的数据库驱动程序也需要很长时间,主要是在更改表文件本身时,速度非常快(不到秒),而且sbt clean通常没有帮助。@Haito如何在编码时及时编译,而不是完全编译,问题末尾提到的那个OP?