2015-05-30 7 views
20

ich versuche, ein scala Beispiel in dem Buch zu kompilieren: „für Scala Play“ aber einen folgenden Kompilierungsfehler auf Play-Konsole erhalten:Play-Rahmen Für Scala: Übersetzungsfehler [Typ Anwendung ist kein Mitglied von Paket-Controller]

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$1.apply(PlayReload.scala:49) ~[na:na] 
     at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.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$1.apply(PlayReload.scala:17) ~[na:na] 
     at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na] 

Application.scala ist:

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 ist

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)) 
    } 

} 

Und r outes-Datei ist:

# 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 ist 2.4.0 und etwa sagt:

[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] $ 

und Java-Version ist:

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 

Irgendwelche Ideen, was das Problem ist und wie dies zu beheben ?

Bisher haben andere Beispiele kompiliert und laufen in meiner Umgebung fehlerfrei.

Vielen Dank für Ihre Unterstützung!

Antwort

44

Play 2.4 erzeugt standardmäßig einen Router mit Abhängigkeitsinjektion, anders als zuvor, wenn ein statischer Router verwendet wurde. Sie haben zwei Möglichkeiten, entfernen Sie die routesGenerator-Linie von build.sbt, so dass Play einen statischen Router generiert, oder (besser) machen Sie Ihre Controller-Klassen anstelle von Objekten, und verwenden Sie die Abhängigkeitsinjektion.

+0

Beide Optionen für mich gearbeitet. Danke für die perfekte Antwort! – user4955663

+5

Und was ist die Philosophie hinter dieser (noch einer anderen) bahnbrechenden Veränderung? – Ashesh

+0

Eigentlich ist es keine brechende Änderung, da es nur die Standardeinstellung für neue Projekte ist - bestehende Projekte verwenden einen statischen Router und müssen sich explizit für einen DI-Router anmelden. Die Philosophie ist, dass der globale Zustand wirklich schlecht ist, das Testen erschwert und es schwieriger macht, über Ihre Anwendung nachzudenken. Ein statischer Router erzwingt den globalen Status. –

1

entfernen routesGenerator: = InjectedRoutesGenerator aus yout Datei build.sbt und alles wird so zu einer Klasse

0

Ändern Sie Ihr Objekt arbeiten:

object Shop extends Controller with WithCart { 
class Shop extends Controller with WithCart { 

object Application extends Controller with WithCart { 
class Application extends Controller with WithCart { 
Verwandte Themen