java.lang.ClassNotFoundException:javax.persistence.spi.PersistenceProvider [英] java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider

查看:108
本文介绍了java.lang.ClassNotFoundException:javax.persistence.spi.PersistenceProvider的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用JPA和Hibernate的应用程序试图将它部署到Tomcat 7.
似乎我没有正确包含所有的库,因为我得到了下面的堆栈错误:

  SEVERE:servlet [Faces Servlet]与path [/ amazontestapplcation]上下文中的Servlet.service()抛出异常[java.lang.NoClassDefFoundError:javax / persistence / spi / PersistenceProvider]带有根本原因
java.lang.ClassNotFoundException:javax.persistence.spi.PersistenceProvider $ b $在java.net.URLClassLoader $ 1.run(未知源)$ b $在java.security .AccessController.doPrivileged(本地方法)$ b $在java.net.URLClassLoader.findClass(未知源)$ b $在java.lang.ClassLoader.loadClass(未知源)$ b $在java.lang.ClassLoader .loadClass(Unknown Source)$ java.util.ClassLoader.defineClass1上的b $ b(Native方法)$ java.lang.ClassLoader.defineClassCond上的b $ b(未知源)$ java.lang.ClassLoader.defineClass上的
(未知所以urce)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access $ 000(Unknown Source )在java.net.URLClassLoader
$ 1.run(未知源)
在java.security.AccessController.doPrivileged(本地方法)
在java.net.URLClassLoader.findClass(未知源)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1698)
at org.apache.catalina.loader。 WebappClassLoader.loadClass(WebappClassLoader.java:1556)
在javax.persistence.spi.PersistenceProviderResolverHolder $ PersistenceProviderResolverPerClassLoader $ CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderReso在Javax.persistence.spi.PersistenceProviderResolverHolder中
$ PersistenceProviderResolverPerClassLoader $ CachingPersistenceProviderResolver。< init>(PersistenceProviderResolverHolder.java:130)
at javax.persistence.spi.PersistenceProviderResolverHolder $ PersistenceProviderResolverPerClassLoader.getPersistenceProviders (PersistenceProviderResolverHolder.java:88)
at javax.persistence.Persistence.getProviders(Persistence.java:75)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
at com.example.service.EMFService。< clinit>(EMFService.java:8)
at com.example.service.UserHandler .getAllUsers(UserHandler.java:30)
at com.example.managedbeans.LoginBean.authenticate(LoginBean.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
在sun.reflect.NativeMethodAcc essorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)
在java.lang.reflect.Method.invoke(未知源)
在org.apache。 el.parser.AstValue.invoke(AstValue.java:264)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el。 TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl。 (UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
在javax.faces.component.UICommand.broadcast上的
在javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.su n.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
,位于javax.faces.webapp。 FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:210)美元,org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225 b $ b)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472 169)

在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)$ b在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
$ b在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
。在组织.apache.cata lina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
。在org.apache.coyote.http11。 AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:565)
。在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:309)$ java.util.concurrent.ThreadPoolExecutor
$ Worker.runTask(未知源)$ java.util.concurrent.ThreadPoolExecutor
$ Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

你可以看到我的WEB -INF / lib文件夹:



我也在我的构建路径中包含这些罐子。任何人都可以给我一个想法,为什么javax.persistence.spi.PersistenceProvider没有加载?



编辑:我也inlucde我的pom.xml文件:

  <依赖性> 
< dependency>
< groupId> org.hibernate.javax.persistence< / groupId>
< artifactId> hibernate-jpa-2.0-api< / artifactId>
< version> 1.0.1.Final< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-core< / artifactId>
< version> 4.1.0.Final< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-entitymanager< / artifactId>
< version> 4.1.0.Final< / version>
< /依赖关系>
< dependency>
< groupId> javax< / groupId>
< artifactId> javaee-api< / artifactId>
< version> 6.0< / version>
< /依赖关系>
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql-connector-java< / artifactId>
< version> 5.1.18< / version>
< /依赖关系>
< /依赖关系>

当我在Tomcat lib文件夹中输入所需的jar文件时,我只设法使它工作。但对我来说这不是一个好的解决方案。我更喜欢只在当前项目中使用hibernate lib。



UPDATE:I还包含项目的整个结构





更新:那么我仍然会得到同样的错误。我从WEB-IN / lib中删除了所有jar,并将它们添加为pom文件中的依赖关系。
我发布了更新的pom.xml文件:

 < dependency> 
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-entitymanager< / artifactId>
< version> 4.1.4.Final< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate.javax.persistence< / groupId>
< artifactId> hibernate-jpa-2.0-api< / artifactId>
< version> 1.0.1.Final< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-core< / artifactId>
< version> 4.1.4.Final< / version>
< /依赖关系>
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql-connector-java< / artifactId>
< version> 5.1.21< / version>
< /依赖关系>
< dependency>
< groupId> org.slf4j< / groupId>
< artifactId> slf4j-jdk14< / artifactId>
< version> 1.5.8< / version>
< /依赖关系>

我也上传一张我的classpath内容的图片:

解决方案


当我输入所需的罐子
Tomcat的lib文件夹中。但对我来说这不是一个好的解决方案。我
更喜欢只包含当前项目中的hibernate lib。

所需的jar必须包含在lib文件夹中,这是没有办法的(除非你想改变Tomcat的配置,你不应该这样做)。



关于我们对你的问题的评论:你应该考虑设置建立一个自动化的构建过程(带有构建的战争文件),所以你不必手工复制文件(这也肯定会使你的问题变得不必要)。


I m having an application using JPA with Hibernate trying to deploy it on a Tomcat 7. It seems that I dont include all the libraries correctly since I get the following stack error:

SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/amazontestapplcation] threw exception [java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider] with root cause
java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1698)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.loadResolverClasses(PersistenceProviderResolverHolder.java:150)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader$CachingPersistenceProviderResolver.<init>(PersistenceProviderResolverHolder.java:130)
    at javax.persistence.spi.PersistenceProviderResolverHolder$PersistenceProviderResolverPerClassLoader.getPersistenceProviders(PersistenceProviderResolverHolder.java:88)
    at javax.persistence.Persistence.getProviders(Persistence.java:75)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
    at com.example.service.EMFService.<clinit>(EMFService.java:8)
    at com.example.service.UserHandler.getAllUsers(UserHandler.java:30)
    at com.example.managedbeans.LoginBean.authenticate(LoginBean.java:51)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

You can see my WEB-INF/lib folder:

I also include these jars in my build path. Could anyone gimme an idea why the javax.persistence.spi.PersistenceProvider is not loaded?

EDIT: i also inlucde my pom.xml file:

<dependencies>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
    </dependencies>

I only managed to get it working when I inlcuded the required jars in the Tomcat lib folder. But this is not a neat solution for me. I prefer inlude the hibernate lib only in the current project.

UPDATE: I Also inlcude the whole structure of the project

UPDATE: Well I still get the same error. I removed all jars from the WEB-IN/lib and I added them as dependencies in the pom file. I post the updated pom.xml file:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.1.4.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.0-api</artifactId>
    <version>1.0.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.1.4.Final</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-jdk14</artifactId>
    <version>1.5.8</version>
</dependency>

I Also upload a pic of the content of my classpath:

Anybody could tell me why my app still cannot load the persistence class?

解决方案

I only managed to get it working when I inlcuded the required jars in the Tomcat lib folder. But this is not a neat solution for me. I prefer inlude the hibernate lib only in the current project.

Required jars have to be included in the lib folder, there is no way around (unless you want to change the Tomcat configuration, what you shouldn't do).

Regarding our comments to your question: You should think about setting up an automated build process (with a built war file) so you don't have to copy around files by hand (also this will surely make your question needless).

这篇关于java.lang.ClassNotFoundException:javax.persistence.spi.PersistenceProvider的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆