【发布时间】:2015-04-01 06:13:28
【问题描述】:
在 TomEE 上运行我的 Java EE 应用程序时出现以下错误:
java.lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery
当我构建应用程序时没有编译时错误。我在 Eclipse 中开发并在项目属性的targeted runtimes下选择了Apache TomEE,这样项目可以访问 Java EE。
由于项目使用 Hibernate,我在 WEB-INF\lib 目录中有以下 jars(我的理解是这些 jars 反过来使用 javax.persistence):
- hibernate-commons-annotations-4.0.4
- hibernate-core-4.3.5
- hibernate-jpa-2.1
我已经看到一堆问题,例如this one,详细说明解决方案是将所需的 JPA jar 添加到应用程序的 lib 目录中,一切都会好起来的。但是,尽管该解决方案可能有效,但对我来说听起来很老套,但我希望 TomEE 自己管理 JPA 库。它是一个 Java EE 服务器,所以它为什么不这样做。什么是干净的解决方案?
【问题讨论】:
-
这个类从 JPA 2.1 开始存在。我猜你的 TomEE 版本只支持 JPA 2.0。事实上,TomEE 的主页上写着:“Java EE 6 Web Profile”。 Java EE 6 包括 JPA 2.0,而不是 2.1。
-
获得了类似的设置,我在 TOMEE 启动时收到警告:... WARN-jar '/
/WEB-INF/lib/hibernate-jpa-2.1-api-1.0.0 .Final.jar' 包含有问题的类:javax.persistence.Entity。它将被忽略。关于如何克服这个问题的任何想法?切换到 TOMEE-2.0.0.SNAPSHOT 可能吗? -
@Continuity8 - 通过将罐子放入生产环境 TOMEE 来解决这个问题对我来说似乎也很棘手。此外,它在使用 maven 进行集成测试的开发人员设置中不起作用...... :-/ 有人有“干净的方式”的想法吗?
标签: java hibernate jpa persistence classnotfoundexception