javax.persistence jar没有加载到tomcat中

时间:2015-11-20 20:52:03

标签: eclipse tomcat jpa persistence classloader

我正在尝试在Tomcat 8上运行JPA servlet。

从我的servlet中,我调用另一个Eclipse项目(JPA项目,而不是WEB项目)中名为QueryDB.class的类的方法。

但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 emf = Persistence.createEntityManagerFactory(“AutomationDB_JPA”)行引发异常;在QueryDB.class中

我正在使用Eclipse Mars和Maven。我在我的pom.xml中定义了EclipseLink:

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

我在我的应用程序的WEB-INF / lib中有以下jar:

  • 的EclipseLink-2.6.1.jar
  • javax.persistence-2.1.0.jar,里面有javax / persistence / Persistence.class

tomcat日志中没有其他SEVERE消息。

此设置有什么问题?

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

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

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

  1. 从tomcat VM classpath
  2. 中排除了我的JPA项目
  3. 将我的JPA项目转换为Utility项目
  4. 在我的Web项目属性中修改了部署程序集以便它 将JPA项目作为.jar归档文件接受到WEB-INF / lib
  5. 我再也没有类加载器异常了。