2015-11-20 39 views
1

我试图运行在Tomcat 8javax.persistence罐子没有加载到tomcat的

从我的servlet我叫(JPA项目名为QueryDB.class一类位于另一个Eclipse项目的方法JPA的servlet,不是WEB项目)。

但是Tomcat的抛出

SEVERE: Servlet.service() for servlet [MyRESTService] in context with path [/AutomationWeb] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/persistence/Persistence] with root cause 
java.lang.ClassNotFoundException: javax.persistence.Persistence 
at java.net.URLClassLoader$1.run(Unknown Source) 
... 

例外是在线路的EntityManagerFactory电动势= Persistence.createEntityManagerFactory( “AutomationDB_JPA”)抛出;在QueryDB.class

我使用Eclipse Mars与Maven。我的EclipseLink定义我的pom.xml:

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.6.1</version> 
</dependency> 

我已经按照我的应用程序的WEB-INF/lib目录罐子:

  • 的EclipseLink-2.6.1.jar
  • javax.persistence-里面

2.1.0.jar,它的javax /持久/ Persistence.class有在Tomcat日志中没有其他严重的消息。

这个设置有什么问题?

我也尝试添加持久性jar到apache-tomcat-8.0.28 \ lib,但得到了同样的错误。

更新:我将Persistence.createEntityManagerFactory调用移动到servlet本身,并没有得到类加载器异常。所以问题会改变:为什么用于QueryDB.class的类加载器与servlet的类加载器不同?另外,为什么QueryDB.class中使用的类加载器没有看到由servlet的类加载器看到的Persistence.class?

回答

0

好的我找到了解决方案。

  1. 排除我的JPA项目从Tomcat VM的classpath
  2. 将我JPA项目的实用项目
  3. 修改部署大会在我的Web项目的属性,使其 将接受JPA项目中的.jar归档到WEB -INF/lib

我没有classloader异常了。