Play Framework For Scala:编译错误[type Application is not a member of package controllers]
Play Framework For Scala: Compilation error[type Application is not a member of package controllers]
我尝试编译书中的 scala 示例:"Play for Scala" 但在 Play 控制台上出现以下编译错误:
C:\Play\exp\ch6_implicits>activator run
[info] Loading project definition from C:\Play\exp\ch6_implicits\project
[info] Set current project to ch6_implicits (in build file:/C:/Play/exp/ch6_implicits/)
--- (Running the application, auto-reloading is enabled) ---
[info] p.a.l.c.ActorSystemProvider - Starting application default Akka system: application
[info] p.c.s.NettyServer$ - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
[info] Compiling 13 Scala sources and 1 Java source to C:\Play\exp\ch6_implicits\target\scala-2.11\classes...
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] 6 errors found
[error] (compile:compileIncremental) Compilation failed
[error] application -
! @6mafk6inc - Internal server error, for (GET) [/products/new] ->
play.sbt.PlayExceptions$CompilationException: Compilation error[type Application is not a member of package controllers]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler.apply(PlayReload.scala:49) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler.apply(PlayReload.scala:44) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile.apply(PlayReload.scala:17) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile.apply(PlayReload.scala:17) ~[na:na]
Application.scala 是:
package controllers
import play.api._
import play.api.mvc._
// We extend the 'WithCart' trait, so we have an implicit conversion from RequestHeader to Cart
object Application extends Controller with WithCart {
def index = Action { implicit request =>
// The index template takes an implicit Cart, which is not available.
// However, the WithCart trait has an implicit conversion from
// RequestHeader to Cart, and we do have an implicit RequestHeader
// here, because `request` is a Request, which extends RequestHeader.
Ok(views.html.index())
}
def contact = Action { implicit request =>
Ok(views.html.contact())
}
}
Shop.scala 是
package controllers
import play.api._
import play.api.mvc._
import models._
object Shop extends Controller with WithCart {
def catalog() = Action { implicit request =>
val products = ProductDAO.list
Ok(views.html.products.catalog(products))
}
}
路由文件是:
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index
GET /catalog controllers.Shop.catalog
GET /contact controllers.Application.contact
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
Play Framework 是 2.4.0,关于说:
[ch6_implicits] $ about
[info] This is sbt 0.13.8
[info] The current project is {file:/C:/Play/exp/ch6_implicits/}root 1.0-SNAPSHOT
[info] The current project is built against Scala 2.11.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, play.sbt.Play, play.sbt.PlayAkkaHttpServer, play.sbt.PlayJava, play.sb
t.PlayLayoutPlugin, play.sbt.PlayNettyServer, play.sbt.PlayScala, play.sbt.routes.RoutesCompiler, play.twirl.sbt.SbtTwirl, com.typesafe.sbt.SbtNativePackager, com.typesafe.sbt.packager.archetypes.Akka
AppPackaging, com.typesafe.sbt.packager.archetypes.JavaAppPackaging, com.typesafe.sbt.packager.archetypes.JavaServerAppPackaging, com.typesafe.sbt.packager.archetypes.jar.ClasspathJarPlugin, com.types
afe.sbt.packager.archetypes.jar.LauncherJarPlugin, com.typesafe.sbt.packager.debian.DebianDeployPlugin, com.typesafe.sbt.packager.debian.DebianPlugin, com.typesafe.sbt.packager.debian.JDebPackaging, c
om.typesafe.sbt.packager.docker.DockerPlugin, com.typesafe.sbt.packager.jdkpackager.JDKPackagerDeployPlugin, com.typesafe.sbt.packager.jdkpackager.JDKPackagerPlugin, com.typesafe.sbt.packager.linux.Li
nuxPlugin, com.typesafe.sbt.packager.rpm.RpmDeployPlugin, com.typesafe.sbt.packager.rpm.RpmPlugin, com.typesafe.sbt.packager.universal.UniversalDeployPlugin, com.typesafe.sbt.packager.universal.Univer
salPlugin, com.typesafe.sbt.packager.windows.WindowsDeployPlugin, com.typesafe.sbt.packager.windows.WindowsPlugin, com.typesafe.sbt.web.SbtWeb, com.typesafe.sbt.jse.SbtJsEngine, com.typesafe.sbt.jse.S
btJsTask, com.typesafe.sbt.coffeescript.SbtCoffeeScript, com.typesafe.sbt.less.SbtLess, com.typesafe.sbt.jshint.SbtJSHint, com.typesafe.sbt.rjs.SbtRjs, com.typesafe.sbt.digest.SbtDigest, com.typesafe.
sbt.mocha.SbtMocha, com.typesafe.sbteclipse.plugin.EclipsePlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4
[ch6_implicits] $
而Java版本是:
C:\Play\exp\ch6_implicits>java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
C:\Play\exp\ch6_implicits>javac -version
javac 1.8.0_45
知道问题是什么以及如何解决吗?
到目前为止,其他示例已编译并且 运行 在我的环境中没有错误。
感谢您的支持!
Play 2.4 默认生成一个依赖注入路由器,不像以前使用静态路由器。您有两个选择,从 build.sbt 中删除 routesGenerator 行,这样播放将生成一个静态路由器,或者(更好)使您的控制器 类 而不是对象,并使用依赖注入。
从您的文件中删除路由生成器 := 注入的路由生成器 build.sbt 一切都会起作用
将您的对象更改为 class,如下所示:
object Shop extends Controller with WithCart {
class Shop extends Controller with WithCart {
object Application extends Controller with WithCart {
class Application extends Controller with WithCart {
将以下代码包含到您的 conf/application.conf 文件中:
play.allowGlobalApplication = 真
我尝试编译书中的 scala 示例:"Play for Scala" 但在 Play 控制台上出现以下编译错误:
C:\Play\exp\ch6_implicits>activator run
[info] Loading project definition from C:\Play\exp\ch6_implicits\project
[info] Set current project to ch6_implicits (in build file:/C:/Play/exp/ch6_implicits/)
--- (Running the application, auto-reloading is enabled) ---
[info] p.a.l.c.ActorSystemProvider - Starting application default Akka system: application
[info] p.c.s.NettyServer$ - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
[info] Compiling 13 Scala sources and 1 Java source to C:\Play\exp\ch6_implicits\target\scala-2.11\classes...
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] C:\Play\exp\ch6_implicits\conf\routes:6: type Application is not a member of package controllers
[error] GET / controllers.Application.index
[error] C:\Play\exp\ch6_implicits\conf\routes:7: type Shop is not a member of package controllers
[error] GET /catalog controllers.Shop.catalog
[error] 6 errors found
[error] (compile:compileIncremental) Compilation failed
[error] application -
! @6mafk6inc - Internal server error, for (GET) [/products/new] ->
play.sbt.PlayExceptions$CompilationException: Compilation error[type Application is not a member of package controllers]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler.apply(PlayReload.scala:49) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$taskFailureHandler.apply(PlayReload.scala:44) ~[na:na]
at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na]
at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na]
at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile.apply(PlayReload.scala:17) ~[na:na]
at play.sbt.run.PlayReload$$anonfun$compile.apply(PlayReload.scala:17) ~[na:na]
Application.scala 是:
package controllers
import play.api._
import play.api.mvc._
// We extend the 'WithCart' trait, so we have an implicit conversion from RequestHeader to Cart
object Application extends Controller with WithCart {
def index = Action { implicit request =>
// The index template takes an implicit Cart, which is not available.
// However, the WithCart trait has an implicit conversion from
// RequestHeader to Cart, and we do have an implicit RequestHeader
// here, because `request` is a Request, which extends RequestHeader.
Ok(views.html.index())
}
def contact = Action { implicit request =>
Ok(views.html.contact())
}
}
Shop.scala 是
package controllers
import play.api._
import play.api.mvc._
import models._
object Shop extends Controller with WithCart {
def catalog() = Action { implicit request =>
val products = ProductDAO.list
Ok(views.html.products.catalog(products))
}
}
路由文件是:
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index
GET /catalog controllers.Shop.catalog
GET /contact controllers.Application.contact
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
Play Framework 是 2.4.0,关于说:
[ch6_implicits] $ about
[info] This is sbt 0.13.8
[info] The current project is {file:/C:/Play/exp/ch6_implicits/}root 1.0-SNAPSHOT
[info] The current project is built against Scala 2.11.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin, play.sbt.Play, play.sbt.PlayAkkaHttpServer, play.sbt.PlayJava, play.sb
t.PlayLayoutPlugin, play.sbt.PlayNettyServer, play.sbt.PlayScala, play.sbt.routes.RoutesCompiler, play.twirl.sbt.SbtTwirl, com.typesafe.sbt.SbtNativePackager, com.typesafe.sbt.packager.archetypes.Akka
AppPackaging, com.typesafe.sbt.packager.archetypes.JavaAppPackaging, com.typesafe.sbt.packager.archetypes.JavaServerAppPackaging, com.typesafe.sbt.packager.archetypes.jar.ClasspathJarPlugin, com.types
afe.sbt.packager.archetypes.jar.LauncherJarPlugin, com.typesafe.sbt.packager.debian.DebianDeployPlugin, com.typesafe.sbt.packager.debian.DebianPlugin, com.typesafe.sbt.packager.debian.JDebPackaging, c
om.typesafe.sbt.packager.docker.DockerPlugin, com.typesafe.sbt.packager.jdkpackager.JDKPackagerDeployPlugin, com.typesafe.sbt.packager.jdkpackager.JDKPackagerPlugin, com.typesafe.sbt.packager.linux.Li
nuxPlugin, com.typesafe.sbt.packager.rpm.RpmDeployPlugin, com.typesafe.sbt.packager.rpm.RpmPlugin, com.typesafe.sbt.packager.universal.UniversalDeployPlugin, com.typesafe.sbt.packager.universal.Univer
salPlugin, com.typesafe.sbt.packager.windows.WindowsDeployPlugin, com.typesafe.sbt.packager.windows.WindowsPlugin, com.typesafe.sbt.web.SbtWeb, com.typesafe.sbt.jse.SbtJsEngine, com.typesafe.sbt.jse.S
btJsTask, com.typesafe.sbt.coffeescript.SbtCoffeeScript, com.typesafe.sbt.less.SbtLess, com.typesafe.sbt.jshint.SbtJSHint, com.typesafe.sbt.rjs.SbtRjs, com.typesafe.sbt.digest.SbtDigest, com.typesafe.
sbt.mocha.SbtMocha, com.typesafe.sbteclipse.plugin.EclipsePlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.4
[ch6_implicits] $
而Java版本是:
C:\Play\exp\ch6_implicits>java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
C:\Play\exp\ch6_implicits>javac -version
javac 1.8.0_45
知道问题是什么以及如何解决吗?
到目前为止,其他示例已编译并且 运行 在我的环境中没有错误。
感谢您的支持!
Play 2.4 默认生成一个依赖注入路由器,不像以前使用静态路由器。您有两个选择,从 build.sbt 中删除 routesGenerator 行,这样播放将生成一个静态路由器,或者(更好)使您的控制器 类 而不是对象,并使用依赖注入。
从您的文件中删除路由生成器 := 注入的路由生成器 build.sbt 一切都会起作用
将您的对象更改为 class,如下所示:
object Shop extends Controller with WithCart {
class Shop extends Controller with WithCart {
object Application extends Controller with WithCart {
class Application extends Controller with WithCart {
将以下代码包含到您的 conf/application.conf 文件中:
play.allowGlobalApplication = 真