Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 播放框架注入错误_Java_Jpa_Playframework - Fatal编程技术网

Java 播放框架注入错误

Java 播放框架注入错误,java,jpa,playframework,Java,Jpa,Playframework,我试图使用Play2.5将JPAApi注入我的控制器,但我一直得到以下异常 com.google.inject.ProvisionException:无法设置,请查看以下错误: 1) Error injecting constructor, java.lang.NoClassDefFoundError: org/dom4j/io/STAXEventReader at play.db.jpa.DefaultJPAApi$JPAApiProvider.<init>(DefaultJP

我试图使用Play2.5将JPAApi注入我的控制器,但我一直得到以下异常

com.google.inject.ProvisionException:无法设置,请查看以下错误:

1) Error injecting constructor, java.lang.NoClassDefFoundError: org/dom4j/io/STAXEventReader
  at play.db.jpa.DefaultJPAApi$JPAApiProvider.<init>(DefaultJPAApi.java:39)
  at play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:34)
  while locating play.db.jpa.DefaultJPAApi$JPAApiProvider
  while locating play.db.jpa.JPAApi
    for parameter 0 at controllers.HomeController.<init>(HomeController.java:20)
  while locating controllers.HomeController
    for parameter 1 at router.Routes.<init>(Routes.scala:40)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
    for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200)
  while locating play.api.http.JavaCompatibleHttpRequestHandler
  while locating play.api.http.HttpRequestHandler
    for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221)
  at play.api.DefaultApplication.class(Application.scala:221)
  while locating play.api.DefaultApplication
  while locating play.api.Application

1 error
     com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1025)
     com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
     play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:405)
     play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:400)
     play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
     play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:158)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1$$anonfun$2.apply(DevServerStart.scala:155)
     play.utils.Threads$.withContextClassLoader(Threads.scala:21)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:155)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:126)
     scala.Option.map(Option.scala:146)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:126)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:124)
     scala.util.Success.flatMap(Try.scala:231)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:124)
     play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:116)
     scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
     scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
     java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402)
     java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
     java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
     java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
     java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

基于您提供的小片段,我假设您使用的是PlayJavaAPI。假设如此,我首先建议您参考依赖注入方面的内容

如果您使用某个Activator模板启动了项目,那么您可能会得到以下两个文件:

.
├── app
│   ├── Module.java
└── conf
    └── application.conf
模块是在Guice中配置绑定的一种方法,基本上就是当组件请求注入给定类型时Guice将提供什么服务

为了让你同时站起来跑步

…首先,在play.modules部分下的application.conf文件中,取消注释要添加到已启用模块集的行,因此您将得到如下结果:

play.modules {
    enabled += Module
}
…接下来,假设您有一个名为JPAApi的接口,该接口有一个具体的实现JPAApiImpl。。。更新Module.java,如下所示:

import com.google.inject.AbstractModule;

public class Module extends AbstractModule {
    @Override
    public void configure() {
        bind(JPAApi.class).to(JPAApiImpl.class);
    }
}
或者,如果JPAApi本身是一个具体的实现,您可以将其绑定到它本身


重新启动应用程序,应该注入控制器。

基于您提供的小片段,我假设您正在使用Play Java API运行。假设如此,我首先建议您参考依赖注入方面的内容

如果您使用某个Activator模板启动了项目,那么您可能会得到以下两个文件:

.
├── app
│   ├── Module.java
└── conf
    └── application.conf
模块是在Guice中配置绑定的一种方法,基本上就是当组件请求注入给定类型时Guice将提供什么服务

为了让你同时站起来跑步

…首先,在play.modules部分下的application.conf文件中,取消注释要添加到已启用模块集的行,因此您将得到如下结果:

play.modules {
    enabled += Module
}
…接下来,假设您有一个名为JPAApi的接口,该接口有一个具体的实现JPAApiImpl。。。更新Module.java,如下所示:

import com.google.inject.AbstractModule;

public class Module extends AbstractModule {
    @Override
    public void configure() {
        bind(JPAApi.class).to(JPAApiImpl.class);
    }
}
或者,如果JPAApi本身是一个具体的实现,您可以将其绑定到它本身


重新启动应用程序,然后应该注入控制器。

您刚刚在构建工具Play使用的sbt中遇到了一个错误。 此错误在Hibernate版本5.2.1中出现,但在5.2.0中没有出现

Hibernate 5.2.1使用sbt还不能处理的maven语法排除dom4j的所有可传递依赖项

目前的解决办法是添加

"dom4j" % "dom4j" % "1.6.1" intransitive()
在build.sbt中与Hibernate依赖项并行创建库依赖项

有关更多详细信息,请查看sbt错误本身,可在此处找到:

我报告的Hibernate错误已被关闭,因为它被证明是sbt问题,可在此处找到:

您刚刚在构建工具Play使用的sbt中遇到了一个bug。 此错误在Hibernate版本5.2.1中出现,但在5.2.0中没有出现

Hibernate 5.2.1使用sbt还不能处理的maven语法排除dom4j的所有可传递依赖项

目前的解决办法是添加

"dom4j" % "dom4j" % "1.6.1" intransitive()
在build.sbt中与Hibernate依赖项并行创建库依赖项

有关更多详细信息,请查看sbt错误本身,可在此处找到:

我报告的Hibernate错误已被关闭,因为它被证明是sbt问题,可在此处找到:

1第一行有一个java.lang.NoClassDefFoundError:org/dom4j/io/StateVentReader-是否配置了此依赖项?2您的Guice配置是什么样子的?我下面的示例没有提到需要配置Guice的任何内容,它将在哪个文件中?我有一个模块类,它似乎与GuiceDOM4J相关,但找不到它或它的一个依赖项。。。正如消息所说。1您在第一行有一个java.lang.NoClassDefFoundError:org/dom4j/io/STAXEventReader——是否配置了此依赖项?2您的Guice配置是什么样子的?我下面的示例没有提到需要配置Guice的任何内容,它将在哪个文件中?我有一个模块类,它似乎与GuiceDOM4J相关,但找不到它或它的一个依赖项。。。正如消息所说,Play自己完成所有Guice配置。JPAAPi绑定由Play完成,它不需要为此声明模块。由于Guice未配置,错误未出现。不应。我认为问题来自数据库配置。@AlaSchneider-啊哈,谢谢你的反馈!因此,我想只有定制绑定时才需要连接您自己的模块?Play自己完成所有Guice配置。JPAAPi绑定由Play完成,它不需要为此声明模块。由于Guice未配置,错误未出现。不应。我认为问题来自数据库配置。@AlaSchneid
呃-啊哈,谢谢你的反馈!!所以我想,只有定制绑定时才需要连接自己的模块?伙计,你真厉害!Thank.sbt 0.13.13修复了该错误,因此不再需要此解决方案。还有一件事:如果您将sbt升级到0.13.13或更高版本,则还需要通过删除~/.ivy2/cache/dom4j或整个~/.ivy2/cache`或~/.ivy2/folderMan来删除本地常春藤缓存中的dom4j,您真是棒极了!Thank.sbt 0.13.13修复了此错误,因此不再需要此解决方案。还有一件事:如果您将sbt升级到0.13.13或更高版本,则还需要通过删除~/.ivy2/cache/dom4j或整个~/.ivy2/cache`或~/.ivy2/文件夹从本地常春藤缓存中删除dom4j