为什么/ Eclipse在哪里注入额外的库,如JPA 1.0?

时间:2015-01-14 19:06:54

标签: java eclipse jpa

尝试在Eclipse的上下文中运行任何东西时,我突然收到此错误:

Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

我知道这是使用的旧JPA 1.0规范,而我的项目使用JPA 2.0。我可以通过Maven和IDEA运行我的单元/集成测试没有问题,但是如果我在Eclipse中运行它们(尝试过Kepler和Luna)我就会收到错误。

进行一些挖掘我发现通过ProjectClassLoader注入了较旧的库:

ProjectClassLoader: entry= $HOME/.m2/repository/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.jar

但是它没有出现在我的Maven依赖项或传递依赖项中。这不是我第一次看到这个。我最后一次删除我的项目并重新创建它,但这次方法失败了。我也试过禁用JPA Facet。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

有两个地方可以看。两者都属于项目属性。

首先,如果您的项目使用方面,请查看该部分。三个将是JPA列出的一个方面。应该检查它,右下角应该是2.0(或2.1)。

接下来还有一个JPA标签。它下面有几个选项卡,但主要是设置JPA版本并指定实现。这可能是你在1.0罐子里拉的。

如果您打开了刻面,请确保两个位置一致。你可以很容易地让它们不同步,弄清楚它是令人困惑和恼人的。

答案 1 :(得分:0)

我终于能够“解决”这个问题 - 至少让自己重新开始工作。这是我做的:

  1. 在Eclipse中删除了我的项目
  2. 删除了.classpath和.class 磁盘上的.project文件(例如find。-name“.classpath”| xargs rm)
  3. 重新导入我的Maven项目
  4. 奇迹般地,JPA 1.0不再包含在项目中了。 @Terry有一些很好的信息,但我的配置根据他的笔记显得正确。我认为这只是一个解决方法,并且Eclipse Luna中可能存在潜在的错误。