adrianhurt / play-bootstrap

A Play Framework library for Bootstrap
https://adrianhurt.github.io/play-bootstrap/
Apache License 2.0
700 stars 83 forks source link

twirl.forwardsRouter no such method error #83

Closed ASchmidt84 closed 7 years ago

ASchmidt84 commented 7 years ago

Hi, I have encountered a very strange error wit b4.

java.lang.NoSuchMethodError: play.routes.compiler.inject.twirl.forwardsRouter_Scope0$forwardsRouter._display_(Ljava/lang/Object;Lscala/reflect/Manifest;)Lplay/twirl/api/Appendable;
    at play.routes.compiler.inject.twirl.forwardsRouter_Scope0$forwardsRouter$$anonfun$apply$1.apply(forwardsRouter.template.scala:27)
    at play.routes.compiler.inject.twirl.forwardsRouter_Scope0$forwardsRouter$$anonfun$apply$1.apply(forwardsRouter.template.scala:27)
    at scala.Option.map(Option.scala:145)
    at play.routes.compiler.inject.twirl.forwardsRouter_Scope0$forwardsRouter.apply(forwardsRouter.template.scala:27)
    at play.routes.compiler.InjectedRoutesGenerator$.generateRouter(RoutesGenerator.scala:210)
    at play.routes.compiler.InjectedRoutesGenerator$.generate(RoutesGenerator.scala:154)
    at play.routes.compiler.RoutesCompiler$$anonfun$compile$1.apply(RoutesCompiler.scala:88)
    at play.routes.compiler.RoutesCompiler$$anonfun$compile$1.apply(RoutesCompiler.scala:87)
    at scala.util.Either$RightProjection.map(Either.scala:536)
    at play.routes.compiler.RoutesCompiler$.compile(RoutesCompiler.scala:87)
    at play.sbt.routes.RoutesCompiler$$anonfun$6$$anonfun$7.apply(RoutesCompiler.scala:137)
    at play.sbt.routes.RoutesCompiler$$anonfun$6$$anonfun$7.apply(RoutesCompiler.scala:136)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at play.sbt.routes.RoutesCompiler$$anonfun$6.apply(RoutesCompiler.scala:136)
    at play.sbt.routes.RoutesCompiler$$anonfun$6.apply(RoutesCompiler.scala:134)
    at com.typesafe.sbt.web.incremental.package$.syncIncremental(package.scala:228)
    at play.sbt.routes.RoutesCompiler$.compileRoutes(RoutesCompiler.scala:134)
    at play.sbt.routes.RoutesCompiler$$anonfun$4.apply(RoutesCompiler.scala:127)
    at play.sbt.routes.RoutesCompiler$$anonfun$4.apply(RoutesCompiler.scala:126)
    at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
    at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
    at sbt.std.Transform$$anon$4.work(System.scala:63)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:228)
    at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
    at sbt.Execute.work(Execute.scala:237)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:228)
    at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
    at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[error] (web/compile:playRoutes) java.lang.NoSuchMethodError: play.routes.compiler.inject.twirl.forwardsRouter_Scope0$forwardsRouter._display_(Ljava/lang/Object;Lscala/reflect/Manifest;)Lplay/twirl/api/Appendable;

My minimal example is

@import logic.userComponent.auth.DefaultEnv
@import com.mohiva.play.silhouette.api.actions.UserAwareRequest
@import play.api.Configuration
@import form.SignInForm
@import play.twirl.api.Content
@()(implicit lang:Messages,req: UserAwareRequest[DefaultEnv,_], webJarAssets: WebJarAssets, config: Configuration)

@implicitFieldConstructor = @{ b4.horizontal.fieldConstructor("col-md-4", "col-md-8") }

<html>
    <head></head>
    <body>
        ahllo
        @b4.hidden("hideMe","")
        @* @b4.text(SignInForm.form("email")) *@
    </body>
</html>

Using Play 2.5.12 b4 1.1.1-P25-B4-SNAPSHOT or 1.1-P25-B4 Same issue. Someone any idea?

adrianhurt commented 7 years ago

Hi @IntelligyScience, sorry for the delay. Have you tried it without all of these imports? Just only the plugin.

@()(implicit lang: Messages)
@implicitFieldConstructor = @{ b4.horizontal.fieldConstructor("col-md-4", "col-md-8") }

<html>
    <head></head>
    <body>
        ahllo
        @b4.hidden("hideMe","")
    </body>
</html>

And if it works, then add the imports one by one to check where could be the conflict.

ASchmidt84 commented 7 years ago

HI Adrian, thanks for your answer. I am sorry, I have to tell that the same effect is still their. Even I deleted all imports and run a pure html template.

adrianhurt commented 7 years ago

Have you tried cleaning the project? Or with a new project? Even try to remove one of the two lines that use b4, or both… It's too strange.

ASchmidt84 commented 7 years ago

I think their is a deeper issue. Now nothing works! Very strange.

ASchmidt84 commented 7 years ago

New Project running in the same. With or without using b4

ASchmidt84 commented 7 years ago

windows and linux

ASchmidt84 commented 7 years ago

Very interesting. On a blog was the solution to add in plugins.sbt addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.3.0") Also the evicted setting on sbt seemes to be a problem. And now I get the "normal" error.

Error

[info] play.api.Play - Application started (Dev)
java.lang.NoSuchMethodError: views.html.b4.hidden_Scope0$hidden._display_(Ljava/lang/Object;Lscala/reflect/Manifest;)Lplay/twirl/api/Appendable;
    at views.html.b4.hidden_Scope0$hidden.apply(hidden.template.scala:26)
    at views.html.frontend.page.test_Scope0$test.apply(test.template.scala:33)
    at controllers.ShoppingCartController$$anonfun$checkout$1$$anonfun$4$$anonfun$apply$12$$anonfun$apply$13$$anonfun$apply$15$$anonfun$apply$16$$anonfun$apply$17.apply(ShoppingCartController.scala:127)
    at controllers.ShoppingCartController$$anonfun$checkout$1$$anonfun$4$$anonfun$apply$12$$anonfun$apply$13$$anonfun$apply$15$$anonfun$apply$16$$anonfun$apply$17.apply(ShoppingCartController.scala:120)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
    at scala.util.Try$.apply(Try.scala:192)
    at scala.util.Success.map(Try.scala:237)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:237)
    at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:237)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
    at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121)
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

This Template:

@()
@implicitFieldConstructor = @{ b4.horizontal.fieldConstructor("col-md-4", "col-md-8") }

<html>
    <head></head>
    <body>
        ahllo
        @b4.hidden("hideMe","")
        @* @b4.text(SignInForm.form("email")) *@
    </body>
</html>
adrianhurt commented 7 years ago

could you copy here your build.sbt file?

ASchmidt84 commented 7 years ago

Ok:

name := "MarsWebSystem"

version := "1.0"

//scalaVersion := "2.11.8"
lazy val scalaV = "2.11.8"

lazy val web = (project in file("web")).settings(
  scalaVersion := scalaV,
  scalaJSProjects := Seq(client),
  pipelineStages in Assets := Seq(uglify, scalaJSPipeline),
  pipelineStages := Seq(uglify, digest, gzip),
  // triggers scalaJSPipeline when using compile or continuous compilation
  compile in Compile <<= (compile in Compile) dependsOn scalaJSPipeline,
  includeFilter in uglify := GlobFilter("public/*.js"),
  //DOCKER
  packageName in Docker := "marsweb",
  version in Docker := "0.1.11",
  dockerBaseImage := "mcpayment/ubuntu1404-java8",
  dockerExposedPorts := Seq(9000),
  dockerExposedVolumes := Seq(
    "/opt/docker/logs",
    "/opt/picture/upload",
    "/opt/picture/standard",
    "/opt/conf"
  ),
  maintainer in Docker := "Scalamat UG",
  dockerRepository in Docker := Some("***.***.***.***:5000/marsweb"),
  dockerUpdateLatest in Docker := true,
  routesGenerator := InjectedRoutesGenerator,
  //routesImport += "controllers.binders._",
  credentials += Credentials(Path.userHome / ".sbt" / "isCredentials"),
  //credentials += Path("/home/andre/.sbt/.isCredentials").asFile),
  resolvers ++= Seq(
    "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases",
    Resolver.url("github repo for html5tags", url("http://loicdescotte.github.io/Play2-HTML5Tags/releases/"))(Resolver.ivyStylePatterns),
    "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
    "Atlassian Releases" at "https://maven.atlassian.com/public/",
    "Typesafe repository releases" at "http://repo.typesafe.com/typesafe/releases/",
    "License4J Runtime Library Maven Repository" at "https://www.license4j.com/maven/",
    "Sonatype Nexus Repository Manager" at "http://nexus.intelligyscience.de/content/repositories/thirdparty/",
    "Sonatype Nexus Repository Manager" at "http://nexus.intelligyscience.de/content/repositories/releases/",
    "Sonatype Releases" at "https://oss.sonatype.org/content/repositories/releases/"
  ),
  libraryDependencies ++= Seq(
    cache,
    ws,
    specs2 % Test,
    filters,
    "com.vmunier" %% "scalajs-scripts" % "1.1.0",
    "org.joda" % "joda-convert" % "1.6",
    "joda-time" % "joda-time" % "2.8.2",
    "com.typesafe.play" %% "play-mailer" % "5.0.0-M1",
    "com.adrianhurt" %% "play-bootstrap" % "1.1-P25-B4",
    //"com.adrianhurt" %% "play-bootstrap" % "1.1.1-P25-B4-SNAPSHOT",
    "org.webjars" %% "webjars-play" % "2.5.0",
    "org.webjars" % "font-awesome" % "4.6.1",
    "org.webjars" % "bootstrap" % "4.0.0-alpha.5",
    "org.webjars" % "jquery" % "2.2.3",
    "org.webjars" % "requirejs" % "2.2.0",
    "org.webjars" % "jquery-ui" % "1.11.4",
    "org.webjars" % "jquery-i18n-properties" % "1.0.9",
    "org.webjars.bower" % "jquery-ui-month-picker" % "3.0.1",
    "org.webjars.bower" % "jquery-ui-vertical-tabs" % "0.1.1",
    "org.webjars" % "jquery-ui-themes" % "1.11.4",
    "org.webjars.bower" % "html5shiv" % "3.7.2",
    "org.webjars" % "respond" % "1.4.2",
    "org.webjars" % "angularjs" % "1.5.5",
    "org.webjars" % "angularjs-pdf" % "1.3.0",
    "org.webjars" % "angular-ui" % "0.4.0-3",
    "org.webjars" % "bootstrap-glyphicons" % "bdd2cbfba0",
    "org.webjars.bower" % "angular-audio" % "1.4.1",
    "org.webjars.bower" % "angular-bootstrap-select" % "0.1.0-rc2",
    "org.webjars.bower" % "angular-bootstrap-show-errors" % "2.3.0",
    "org.webjars.bower" % "angular-bootstrap-slider" % "0.1.26",
    "org.webjars.bower" % "angular-bootstrap-switch" % "0.5.0",
    "org.webjars.bower" % "angular-breadcrumb" % "0.4.1",
    "org.webjars.bower" % "bxslider-4" % "4.2.5",
    "com.mohiva" %% "play-silhouette" % "4.0.0",
    "com.mohiva" %% "play-silhouette-password-bcrypt" % "4.0.0",
    "com.mohiva" %% "play-silhouette-persistence" % "4.0.0",
    "com.mohiva" %% "play-silhouette-crypto-jca" % "4.0.0",
    "net.codingwell" %% "scala-guice" % "4.0.1",
    "com.nappin" %% "play-recaptcha" % "2.0",
    "com.sksamuel.scrimage" %% "scrimage-core" % "2.1.0",
    "com.sksamuel.scrimage" %% "scrimage-io-extra" % "2.1.0",
    "com.sksamuel.scrimage" %% "scrimage-filters" % "2.1.0",
    "com.github.marcospereira" %% "play-hocon-i18n" % "0.0.2",
    "org.jsoup" % "jsoup" % "1.8.2",
    "ai.x" %% "play-json-extensions" % "0.8.0",
    "net.ceedubs" % "ficus_2.11" % "1.1.2",
    "org.scalaj" %% "scalaj-http" % "2.3.0",
    "org.reactivemongo" %% "reactivemongo" % "0.12.0",
    //"org.scalactic" %% "scalactic" % "3.0.0",
    //"org.scalatest" %% "scalatest" % "3.0.0" % "test",
    "com.squants"  %% "squants"  % "0.6.2",
    "de.scalamat" %% "marslogiccorev3" % "0.1.40" excludeAll(
      ExclusionRule(organization = "com.typesafe.play")
    ),
    "com.pd4ml.pro.volume" % "pd4ml" % "3.10.1",
    "com.license4j" % "license4j-runtime-library" % "4.6.8",
    "com.mohiva" %% "play-html-compressor" % "0.6.3",
    "org.antlr" % "ST4" % "4.0.8", //Für loops: http://stackoverflow.com/questions/18437005/how-do-i-iterate-though-a-java-list-in-stringtemplate
    "org.consensusresearch" %% "scrypto" % "1.2.0-RC3"
  )
).enablePlugins(PlayScala,DockerPlugin).dependsOn(sharedJvm)

lazy val client = (project in file("client")).settings(
  scalaVersion := scalaV,
  persistLauncher := true,
  persistLauncher in Test := false,
  resolvers ++= Seq(
    "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
  ),
  libraryDependencies ++= Seq(
    "org.scala-js" %%% "scalajs-dom" % "0.9.1",
    "com.lihaoyi" %%% "scalatags" % "0.6.3",
    "org.querki" %%% "jquery-facade" % "1.0",
    "io.surfkit" %%% "scalajs-google-maps" % "0.0.2-SNAPSHOT",
    "com.github.karasiq" %%% "scalajs-bootstrap" % "1.1.2"
  ),
  jsDependencies ++= Seq(
    "org.webjars" % "jquery" % "2.2.1" / "jquery.js" minified "jquery.min.js"
  )
).enablePlugins(ScalaJSPlugin, ScalaJSWeb).dependsOn(sharedJs)

lazy val shared = (crossProject.crossType(CrossType.Pure) in file("shared")).
  settings(
    scalaVersion := scalaV,
    libraryDependencies ++= Seq(
      "com.lihaoyi" %%% "upickle" % "0.3.8",
      "com.lihaoyi" %%% "autowire" % "0.2.5",
      "com.lihaoyi" %%% "scalatags" % "0.6.3"
    )
  ).
  jsConfigure(_ enablePlugins ScalaJSWeb)

lazy val sharedJvm = shared.jvm
lazy val sharedJs = shared.js

// loads the server project at sbt startup
onLoad in Global := (Command.process("project web", _: State)) compose (onLoad in Global).value
adrianhurt commented 7 years ago

Wow, you have lots of dependencies 😄

I don't know why your project doesn't find b4.hidden helper… Does it happen with every helper or only with hidden one?

May be you can try with an empty project in order to discard if it's an problem specific to this library or it could be a conflict between more dependencies.

ASchmidt84 commented 7 years ago

Yes :)

It is with all b4.

Maybe it helps the compiled code:

package views.html.frontend.page

import play.twirl.api._
import play.twirl.api.TemplateMagic._

     object test_Scope0 {
import models._
import controllers._
import play.api.i18n._
import views.html._
import play.api.templates.PlayMagic._
import play.api.mvc._
import play.api.data._

class test extends BaseScalaTemplate[play.twirl.api.HtmlFormat.Appendable,Format[play.twirl.api.HtmlFormat.Appendable]](play.twirl.api.HtmlFormat) with play.twirl.api.Template1[Messages,play.twirl.api.HtmlFormat.Appendable] {

  /**/
  def apply/*1.2*/()(implicit lang: Messages):play.twirl.api.HtmlFormat.Appendable = {
    _display_ {
      {

implicit def /*2.2*/implicitFieldConstructor/*2.26*/ = {{ b4.horizontal.fieldConstructor("col-md-4", "col-md-8") }};
Seq[Any](format.raw/*1.29*/("""
"""),format.raw/*2.88*/("""

"""),format.raw/*5.1*/("""<html>
    <head></head>
    <body>
        ahllo
        """),format.raw/*9.38*/("""
        """),_display_(/*10.10*/b4/*10.12*/.text(form.SignInForm.form("email"))),format.raw/*10.48*/("""
    """),format.raw/*11.5*/("""</body>
</html>"""))
      }
    }
  }

  def render(lang:Messages): play.twirl.api.HtmlFormat.Appendable = apply()(lang)

  def f:(() => (Messages) => play.twirl.api.HtmlFormat.Appendable) = () => (lang) => apply()(lang)

  def ref: this.type = this

}

}

/**/
object test extends test_Scope0.test
              /*
                  -- GENERATED --
                  DATE: Mon Mar 27 14:13:36 CEST 2017
                  SOURCE: /Development/marswebsystem/web/app/views/frontend/page/test.scala.html
                  HASH: 6af225904a3d5aae86c3480e2adeceb86afeff47
                  MATRIX: 541->1|655->30|687->54|779->28|807->116|836->119|921->206|958->216|969->218|1026->254|1058->259
                  LINES: 20->1|24->2|24->2|25->1|26->2|29->5|33->9|34->10|34->10|34->10|35->11
                  -- GENERATED --
              */
ASchmidt84 commented 7 years ago

Ok interessting again! If I am using @helper.inputText I will get the same error.

ASchmidt84 commented 7 years ago

I found the problem!!!! I used "com.vmunier" %% "scalajs-scripts" % "1.1.0" but for my twirl I need -> "com.vmunier" %% "scalajs-scripts" % "1.0.0"

adrianhurt commented 7 years ago

great!