Play Framework For Scala:编译错误[类型应用程序不是包控制器的成员]
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/30543960/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Play Framework For Scala: Compilation error[type Application is not a member of package controllers]
提问by user4955663
I try to compile a scala example in the book: "Play for Scala" but get a following compilation error on Play console:
我尝试在书中编译一个 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 is:
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 is
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))
}
}
And routes file is:
路由文件是:
# 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 is 2.4.0 and about says:
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] $
And Java version is:
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
Any ideas what's the problem and how to fix this?
任何想法是什么问题以及如何解决这个问题?
So far other examples have compiled and run without error in my environment.
到目前为止,其他示例已在我的环境中编译和运行而没有错误。
Thank you for your support!
谢谢您的支持!
回答by James Roper
Play 2.4, by default, generates a dependency injected router, unlike previously, when it used a static router. You have two options, remove the routesGenerator line from build.sbt so play will generate a static router, or (better) make your controllers classes instead of objects, and use dependency injection.
默认情况下,Play 2.4 会生成依赖项注入的路由器,这与以前使用静态路由器时不同。你有两个选择,从 build.sbt 中删除 routesGenerator 行,这样 play 将生成一个静态路由器,或者(更好)让你的控制器类而不是对象,并使用依赖注入。
回答by Oussama Zerouali
remove routesGenerator := InjectedRoutesGenerator from yout file build.sbt and all will work
从你的文件 build.sbt 中删除 routesGenerator := InjectedRoutesGenerator 并且一切都会起作用
回答by lucasddaniel
Change your object to a class like this:
将您的对象更改为这样的类:
object Shop extends Controller with WithCart {
class Shop extends Controller with WithCart {
object Application extends Controller with WithCart {
class Application extends Controller with WithCart {
回答by Hanumanth s
Include below code into into your conf/application.conf file:
将以下代码包含到您的 conf/application.conf 文件中:
play.allowGlobalApplication = true
play.allowGlobalApplication = 真

