2014-07-17 101 views
2

这是我第一次真正玩弄使用Eclipse的Java开发。我正在尝试使用EclipseLink的JPA实现。我将所有实体都移动到一个单独的包“实体”中。我在另一个名为“dataModeling”的JPA项目中有persistence.xmlEclipse警告:class javax.persistence。* not found

package explorer

一切都建立并运行良好。

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

warning messages

的解决办法是进入每个相关项目的属性,并在Java构建路径>库,单击添加库,然后用户库,然后选择的EclipseLink

但是,对我来说,在每个项目中引用EclipseLink都没有意义!这是一个实现细节,我不想让其他项目负担沉重。它看起来像是这样发生的,因为其他项目看到注释并且不识别它们。

所以真正的问题是:如何在不需要引用我的JPA实现的其他项目的情况下使用JPA(通过注释)?

+0

** javax.persistence.Entity **是库** javaee.jar **的一个类。你的项目类路径中有这个jar吗? –

+0

@MarkKorzhov忍受着我,在这里。该类已经在EclipseLink库中定义。从javaee引用它的意义何在?jar'?我试图避免在不知道JPA的情况下添加对一堆项目的引用。 –

+0

persistence-api.jar(又名javax.persistence.jar)。你不需要javaee.jar(除非你想拉入JavaEE的其余部分!!!) –

回答

1

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

就我而言,我使用了在Eclipse插件目录下显示的副本。这些注释真的是空的,没有任何不需要的依赖关系。 JAR文件(javax.persistence._<version>.jar)仅在添加Dali和EclipseLink插件(一个或另一个)后才显示。

7

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文件中仍然需要使用它的其他项目完成以上依赖关系。

+0

我没有使用Maven(实际上并不确定它是什么)。所以这听起来像是因为我的实体装饰了注释,任何引用它们的eclipse项目也必须参考EclipsleLink。有没有办法避免使用这些注释? –

+0

@TravisParks查看更新 - 您使用'EntityManager'的项目应该具有这些依赖关系。 –

+0

目前它确实有这些依赖关系。每个参考我的实体的项目仍然会收到警告。 –