【问题标题】:Javax.persistance not available in TomEEJavax.persistence 在 TomEE 中不可用
【发布时间】: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


【解决方案1】:

@JB Nizet 的回答是公认的解决方案:

这个类从 JPA 2.1 开始存在。我猜只有你的 TomEE 版本 支持 JPA 2.0。事实上,TomEE 的主页上写着:“Java EE 6 Web Profile”。Java EE 6 包括 JPA 2.0,而不是 2.1。- JB Nizet

【讨论】:

  • 你必须自己添加jar,或者使用默认支持JPA 2.1的容器。
  • 谢谢,我已将休眠版本更改为符合 jpa 2.0 的 4.2。谢谢你和@JB Nizet)
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2017-02-17
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多