2013-08-26 1 views
0

В более крупном игровом приложении 2.1.3 я начал использовать JCLouds blobstorage. Я добавил зависимостейScala + Playframework + JClouds: java.lang.IllegalArgumentException: Невозможно установить javax.inject.Provider field

"org.apache.jclouds" % "jclouds-allblobstore" % "1.6.1-incubating", 
"com.google.code.findbugs" % "jsr305" % "1.3.+" 

и добавил действие работает следующий код

val action = Action { 
    val context = ContextBuilder.newBuilder("s3") 
    .endpoint("https://cs.hosteurope.de") 
    .credentials(username, password) 
    .buildView(classOf[BlobStoreContext]) 
    Ok("success") 
} 

Когда я запускаю это действие, я получаю:

java.lang.IllegalArgumentException: Can not set javax.inject.Provider field 

Более подробно, я получаю

[CreationException: Guice creation errors: 1) Error in custom provider, java.lang.IllegalArgumentException: Can not set javax.inject.Provider field org.jclouds.blobstore.config.BlobStoreMapModule$BlobMapFactory.blobBuilders to com.google.inject.internal.InjectorImpl$4 at org.jclouds.blobstore.config.BlobStoreMapModule.configure(BlobStoreMapModule.java:50) while locating org.jclouds.blobstore.BlobMap$Factory Caused by: java.lang.IllegalArgumentException: Can not set javax.inject.Provider field org.jclouds.blobstore.config.BlobStoreMapModule$BlobMapFactory.blobBuilders to com.google.inject.internal.InjectorImpl$4 at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) at java.lang.reflect.Field.set(Field.java:680) at com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:54) at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.Scopes$1$1.get(Scopes.java:65) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:204) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:198) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:198) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:179) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109) at com.google.inject.Guice.createInjector(Guice.java:95) at org.jclouds.ContextBuilder.buildInjector(ContextBuilder.java:405) at org.jclouds.ContextBuilder.buildInjector(ContextBuilder.java:329) at org.jclouds.ContextBuilder.buildView(ContextBuilder.java:620) at org.jclouds.ContextBuilder.buildView(ContextBuilder.java:600) at controllers.admin.OtherController$$anonfun$7$$anonfun$apply$2.apply(OtherController.scala:40) at controllers.admin.OtherController$$anonfun$7$$anonfun$apply$2.apply(OtherController.scala:36) at controllers.admin.utils.MenuController$MenuAction.apply(Menu.scala:51) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:109) at play.utils.Threads$.withContextClassLoader(Threads.scala:18) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:108) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:106) at scala.Option.map(Option.scala:145) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2.apply(Action.scala:106) at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2.apply(Action.scala:99) at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:137) at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1417) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) 

Чтобы проследить проблему, я создал совершенно новое приложение для воспроизведения с теми же библиотечными зависимостями, а затем заменил основное действие на код выше. Это работает отлично. И так как я добавил все зависимости библиотеки от большого приложения для воспроизведения, я не знаю, что еще в более крупном приложении может сломать его.

Что может вызвать эту проблему?

редактировать: Зависимости большого приложения:

"mysql" % "mysql-connector-java" % "5.1.25", 
"org.squeryl" %% "squeryl" % "0.9.5-6", 
"net.sf.jasperreports" % "jasperreports" % "4.7.1", 
"com.typesafe" %% "play-plugins-mailer" % "2.1.0", 
"org.scalatest" %% "scalatest" % "2.0.M5b" % "test", 
"jp.t2v" %% "play2.auth"  % "0.9", 
"jp.t2v" %% "play2.auth.test" % "0.9" % "test", 
"org.scala-lang" % "scala-actors" % "2.10.0" % "test", 
"com.unboundid" % "unboundid-ldapsdk" % "2.3.1", 
"net.sf.uadetector" % "uadetector-resources" % "2013.06", 
"org.apache.commons" % "commons-email" % "1.3.1", 
"org.apache.jclouds" % "jclouds-allblobstore" % "1.6.1-incubating", 
"com.google.code.findbugs" % "jsr305" % "1.3.+" 
+0

Как насчет "org.apache.jclouds"% "jclouds-core"? – Kris

ответ

0

Очень странно, это работает, когда я двигаю две зависимости

"org.apache.jclouds" % "jclouds-allblobstore" % "1.6.1-incubating", 
"com.google.code.findbugs" % "jsr305" % "1.3.+" 

в верхней части списка. Когда они находятся внизу, это не работает. Так

"mysql" % "mysql-connector-java" % "5.1.25", 
"org.squeryl" %% "squeryl" % "0.9.5-6", 
"net.sf.jasperreports" % "jasperreports" % "4.7.1", 
"com.typesafe" %% "play-plugins-mailer" % "2.1.0", 
"org.scalatest" %% "scalatest" % "2.0.M5b" % "test", 
"jp.t2v" %% "play2.auth"  % "0.9", 
"jp.t2v" %% "play2.auth.test" % "0.9" % "test", 
"org.scala-lang" % "scala-actors" % "2.10.0" % "test", 
"com.unboundid" % "unboundid-ldapsdk" % "2.3.1", 
"net.sf.uadetector" % "uadetector-resources" % "2013.06", 
"org.apache.commons" % "commons-email" % "1.3.1", 
"org.apache.jclouds" % "jclouds-allblobstore" % "1.6.1-incubating", 
"com.google.code.findbugs" % "jsr305" % "1.3.+" 

брейки, но

"org.apache.jclouds" % "jclouds-allblobstore" % "1.6.1-incubating", 
"com.google.code.findbugs" % "jsr305" % "1.3.+", 
"mysql" % "mysql-connector-java" % "5.1.25", 
"org.squeryl" %% "squeryl" % "0.9.5-6", 
"net.sf.jasperreports" % "jasperreports" % "4.7.1", 
"com.typesafe" %% "play-plugins-mailer" % "2.1.0", 
"org.scalatest" %% "scalatest" % "2.0.M5b" % "test", 
"jp.t2v" %% "play2.auth"  % "0.9", 
"jp.t2v" %% "play2.auth.test" % "0.9" % "test", 
"org.scala-lang" % "scala-actors" % "2.10.0" % "test", 
"com.unboundid" % "unboundid-ldapsdk" % "2.3.1", 
"net.sf.uadetector" % "uadetector-resources" % "2013.06", 
"org.apache.commons" % "commons-email" % "1.3.1" 

работы.

Проблема решена для меня сейчас. Если у кого-то есть идеи, почему порядок может быть важен, мне было бы любопытно.

+0

Библиотека uadetector-resources имеет транзитивную зависимость от «com.google.code.findbugs: jsr305: 2.0.1», как и другая зависимость. Возможно, в вашем дереве зависимостей есть некоторые конфликты, которые могут быть решены при использовании правильной стратегии разрешения (или вы найдете решение, установив транзиты вручную). Это может помочь создать подробный отчет о зависимости, чтобы найти подходящее решение. – before