2017-04-03 25 views
0

由於WebJarAssets資源初始化失敗,運行我的應用程序時出現NoSuchMethodError問題,我有點問題。 我想利用WebJarAssets在我scala.html文件如下在注入WebJarAssets控制器期間出現NoSuchMethodError

<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.fullPath("react", "react.js"))'></script> 
<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.fullPath("react", "react-dom.js"))'></script> 
<script type='text/javascript' src='@routes.WebJarAssets.at(WebJarAssets.fullPath("jquery", "jquery.js"))'></script> 

我build.sbt如下

name := "myApp" 
version := "1.0" 

lazy val root = (project in file(".")).enablePlugins(PlayJava, SbtWeb, PlayEbean) 

scalaVersion := "2.11.8" 

JsEngineKeys.engineType := JsEngineKeys.EngineType.Node 

libraryDependencies ++= Seq(
    javaJdbc, 
    cache, 
    javaWs, 
    "mysql" % "mysql-connector-java" % "5.1.27", 
    "commons-io" % "commons-io" % "2.5" withSources(), 
    "org.webjars" % "webjars-play_2.11" % "2.4.0-2", 
    //"org.webjars" %% "webjars-play" % "2.5.0", 
    "org.webjars" % "react" % "15.3.1", 
    "org.webjars.npm" % "react-dom" % "15.0.1", 
    "org.apache.poi" % "poi" % "3.14", 
    "org.apache.poi" % "poi-ooxml" % "3.14", 
    "org.webjars" % "jquery" % "3.1.0", 
    "org.apache.pdfbox" % "pdfbox" % "2.0.3", 
    "org.webjars" % "highcharts" % "4.2.5", 
    "org.webjars" % "material-design-icons" % "3.0.0", 
    evolutions, 
    "javax.mail" % "mail" % "1.4.7", 
    "be.objectify" %% "deadbolt-java" % "2.5.3" 
) 

resolvers += Resolver.url("Typesafe Ivy releases", url("https://repo.typesafe.com/typesafe/ivy-releases"))(Resolver.ivyStylePatterns) 

fork in run := false 

正如你所看到的,我已經嘗試了幾個不同的webjar庫 我的應用程序的plugin.sbt是如下

// The Play plugin 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12") 

// Web plugins 
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") 
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.4") 
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8") 
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1") 
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") 
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.6") 
addSbtPlugin("io.teamscala.sbt" % "sbt-babel" % "1.0.5") 

addSbtPlugin("com.typesafe.sbt" % "sbt-gzip" % "1.0.0") 
//addSbtPlugin("com.github.stonexx.sbt" % "sbt-babeljs" % "1.0.5") 

// Play enhancer - this automatically generates getters/setters for public fields 
// and rewrites accessors of these fields to use the getters/setters. Remove this 
// plugin if you prefer not to have this feature, or disable on a per project 
// basis using disablePlugins(PlayEnhancer) in your build.sbt 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") 

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using 
// enablePlugins(PlayEbean). 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "4.0.0-M2") 

//sbt plugin for eclipse 
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.1.0") 

在運行的應用程序,我得到了下面的堆棧跟蹤

1) Error injecting constructor, java.lang.NoSuchMethodError: controllers.AssetsBuilder.<init>(Lplay/api/http/HttpErrorHandler;)V 
    at controllers.WebJarAssets.<init>(WebJarAssets.scala:20) 
    at controllers.WebJarAssets.class(WebJarAssets.scala:20) 
    while locating controllers.WebJarAssets 
    for the 10th parameter of router.Routes.<init>(Routes.scala:61) 
    while locating router.Routes 
    while locating play.api.inject.RoutesProvider 
    while locating play.api.routing.Router 
    for the 1st parameter of play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:205) 
    while locating play.api.http.JavaCompatibleHttpRequestHandler 
    while locating play.api.http.HttpRequestHandler 
    for the 6th parameter of play.api.DefaultApplication.<init>(Application.scala:228) 
    at play.api.DefaultApplication.class(Application.scala:227) 
    while locating play.api.DefaultApplication 
    while locating play.api.Application 

1 error 
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1028) 
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054) 
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:405) 
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:400) 
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137) 
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:166) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:163) 
    at play.utils.Threads$.withContextClassLoader(Threads.scala:21) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:163) 
Caused by: java.lang.NoSuchMethodError: controllers.AssetsBuilder.<init>(Lplay/api/http/HttpErrorHandler;)V 
    at controllers.WebJarAssets.<init>(WebJarAssets.scala:20) 
    at controllers.WebJarAssets$$FastClassByGuice$$db4380e1.newInstance(<generated>) 
    at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89) 
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:111) 
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90) 
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) 
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) 
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) 
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194) 

任何有關可能導致這種情況的見解都將非常有幫助。

+0

不相關的問題,但目前的PDFBox的版本是2.0。 5。 –

回答

1

您正在使用播放2.5因此使用下面的依賴關係:

"org.webjars" %% "webjars-play" % "2.5.0-4" 

並確保您已經定義了一個路線:

GET   /assets/*file   controllers.Assets.at(path="/public", file) 
+0

謝謝,我沒有嘗試過,沒有運氣。以這種方式,預計我應該注入一個contollers.WebJarAssets的實例,並在渲染視圖文件時將它作爲參數傳遞給它?我問這並不是因爲閱讀文檔而懶惰(我在這個問題上花了一週的時間),而是因爲截止日期快到了,我不想放棄這項技術。這就是說,作爲一種解決方法,我將必要的文件放入公用文件夾中,並使用Assets.at來包含它們。 –

+0

我不知道什麼是注射問題。但是您可以避免使用'webjars-play'並使用內置的sbt-web WebJars支持:https://www.playframework.com/documentation/2.5.x/AssetsOverview#WebJars –

+0

謝謝,試過了,沒有運氣。我只是將資源放置在公用文件夾中,並使用「Assets.at」引用它們 –

相關問題