starter play new framework scala playframework playframework-2.0

new - scala play framework sbt



Play Framework For Scala: error de compilaciĆ³n (3)

Intento compilar un ejemplo de scala en el libro: "Jugar para Scala", pero aparece el siguiente error de compilación en la consola 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$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 es:

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 es

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

Y el archivo de rutas es:

# 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 es 2.4.0 y sobre dice:

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

Y la versión de Java es:

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

¿Alguna idea de cuál es el problema y cómo solucionarlo?

Hasta ahora, otros ejemplos se han compilado y ejecutado sin errores en mi entorno.

¡Gracias por tu apoyo!


Cambia tu objeto a una clase como esta:

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


Play 2.4, de forma predeterminada, genera un enrutador de dependencia inyectada, a diferencia de lo anterior, cuando usaba un enrutador estático. Tiene dos opciones, eliminar la línea de RoutersGenerator de build.sbt para que el juego genere un enrutador estático, o (mejor) haga que sus controladores sean clases en lugar de objetos, y use la inyección de dependencia.


elimina routeGenerator: = InjectedRoutesGenerator de tu archivo build.sbt y todo funcionará