为什么sbt在build.sbt工作时报告"找不到:值PlayScala"与Build.scala?

Vik*_*uri 10 scala sbt playframework

我正在创建一个多模块sbt项目,具有以下结构:

<root>
----build.sbt
----project
    ----Build.scala
    ----plugins.sbt
----common
----LoggingModule  
Run Code Online (Sandbox Code Playgroud)

LoggingModule是一个Play Framework项目,同时common是一个简单的Scala项目.

plugins.sbt:

resolvers += "Typesafe repo" at "http://repo.typesafe.com/typesafe/releases/"

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.3")  
Run Code Online (Sandbox Code Playgroud)

虽然我有这个build.sbt,但一切正常,它承认PlayScala:

name := "Multi-Build"

lazy val root = project.in(file(".")).aggregate(common, LoggingModule).dependsOn(common, LoggingModule)

lazy val common = project in file("common")

lazy val LoggingModule = (project in file("LoggingModule")).enablePlugins(PlayScala)  
Run Code Online (Sandbox Code Playgroud)

但是,我很快将其放入project/Build.scala"build.sbt"而不是如下:

object RootBuild extends Build {  

  lazy val root = project.in(file("."))
    .aggregate(common, LoggingModule)
    .dependsOn(common, LoggingModule)

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

  ...//other settings
}
Run Code Online (Sandbox Code Playgroud)

它会产生错误:

not found: value PlayScala
lazy val LoggingModule = (project in file("LoggingModule")).enablePlugins(PlayScala)
                                                                          ^
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

sjr*_*jrd 14

这只是一个缺失的导入.

.sbt文件中,默认情况下会自动导入一些内容:扩展的对象内容Plugin和s中的(> = 0.13.5)autoImport字段AutoPlugin.就是这样的PlayScala.

Build.scala文件中,适用正常的Scala导入规则.所以你必须更明确地导入一些东西.在这种情况下,您需要import play.PlayScala(或.enabledPlugins(play.PlayScala)直接使用).

  • 在 Play 2.5.x 中,导入现在是 `play.sbt.PlayScala` (2认同)