【问题标题】:Eclipse Warnings: class javax.persistence.* not foundEclipse 警告:找不到类 javax.persistence.*
【发布时间】:2014-07-17 20:17:00
【问题描述】:

这是我第一次真正使用 Eclipse 进行 Java 开发。我正在尝试使用 EclipseLink 的 JPA 实现。我将我所有的实体移动到一个单独的包“实体”中。我在一个名为“dataModeling”的单独 JPA 项目中有 persistence.xml

一切都构建并运行良好。

几乎每个项目都依赖于我的实体。但是,我看到警告 Class javax.persistence.Entity not found - continuing with a stub. 等出现,因为相关项目不引用 EclipseLink。

解决方案是进入每个依赖项目的属性,在 Java Build Path > Libraries 下,点击 Add Library,然后点击 User Library 和然后选择 EclipseLink

但是,对我来说,在每个项目中都引用 EclipseLink 是没有意义的!这是我不想给其他项目带来负担的实现细节。似乎正在发生这种情况,因为其他项目看到注释但无法识别它们。

所以真正的问题是:我如何使用 JPA(通过注解)而不需要所有其他项目都需要引用我的 JPA 实现?

【问题讨论】:

  • javax.persistence.Entity 是库 javaee.jar 的一个类。你的项目类路径中有这个 jar 吗?
  • @MarkKorzhov 和我在一起,在这里。该类已在 EclipseLink 库中定义。从javaee.jar 引用它有什么意义?当他们对 JPA 一无所知时,我试图避免添加对一堆项目的引用。
  • persistence-api.jar(又名 javax.persistence.jar)。您不需要 javaee.jar(除非您想引入 JavaEE 的其余部分!!!)
  • Javax.persistence 类只是JPA 规范的接口,其中Hibernate 和EclipseLink 是提供者,也需要J2EE 容器来实现。所以你会在很多地方找到一个persistence.jar,因为它们都需要它来工作。由于您的实体引用了 javax.persistence 类,因此任何需要您的实体的项目也需要 javax.persistence 类。如果他们打算以某种方式使用 EntityManager/JPA,其他项目将只需要 Eclipselink jar
  • @Travis Parks。是的,我知道,“JPA 人”非常懒惰,不愿意提供标准的 persistence-api.jar(已经在其他地方记录),而它应该是任何 JCP“项目”的标准规定。告诉甲骨文。

标签: java eclipse jpa eclipselink compiler-warnings


【解决方案1】:

您的pom.xml 应包含:

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
    <scope>compile</scope>
</dependency>

第一个是Eclipse-Link(你已经有了),第二个是Persistence API,这是缺少的。

如果您没有使用 maven - 请确保 javax.persistence-2.0.0.jar 在您的类路径中。

注意这是2.0.0版本,最新的是2.1.0

更新 使用EntityManager 的项目应该有这些依赖。将实体和persistence.xml 放在单独的 jar 文件中仍然需要使用它的其他项目来实现上述依赖项。

【讨论】:

  • 我没有使用 Maven(实际上并不确定它是什么)。所以这听起来像是因为我的实体装饰有注释,任何引用它们的 Eclipse 项目也必须引用 EclipsleLink。有没有办法避免使用这些注释?
  • @TravisParks 看看更新——你使用EntityManager的项目应该有这些依赖。
  • 目前它确实有这些依赖关系。对于每个引用我的实体的项目,我仍然会收到警告。
【解决方案2】:

感谢@neil-stockton 和@chris,我能够弄清楚发生了什么。大多数 JPA 实现都有一个 javax.persistence JAR 的副本在某处浮动。它们中的大多数都与其他所有东西捆绑在一起,导致了我的依赖噩梦。似乎没有一个事实上的实现。

在我的例子中,我使用了显示在我的 Eclipse 插件目录下的副本。这些注释实际上是空的,没有任何不需要的依赖项。 JAR 文件 (javax.persistence._&lt;version&gt;.jar) 仅在我添加了 Dali 和 EclipseLink 插件(一个或另一个)后才出现。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2015-02-09
    • 2013-08-15
    • 1970-01-01
    • 2011-12-22
    • 2023-03-28
    • 1970-01-01
    • 2017-11-23
    • 2017-09-20
    相关资源
    最近更新 更多