[英]Why/Where does Eclipse inject extra libraries such as JPA 1.0?
尝试在Eclipse上下文中运行任何内容时,我突然收到此错误:
Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
我知道这是使用的旧的JPA 1.0规范,而我的项目使用的是JPA 2.0。 我可以通过Maven和IDEA来运行单元/集成测试,但是如果在Eclipse中运行它们(尝试开普勒和Luna),我会收到错误消息。
进行一些挖掘,我发现较旧的库是通过ProjectClassLoader注入的:
ProjectClassLoader: entry= $HOME/.m2/repository/javax/persistence/persistence-api/1.0.2/persistence-api-1.0.2.jar
但是,它没有显示在我的Maven依赖项或传递性依赖项中。 这不是我第一次看到这个。 我上次删除我的项目并重新创建它时,但是这种方法这次失败了。 我还尝试禁用JPA Facet。
我该如何解决?
有2个地方可以看。 两者都在项目属性下。
首先,如果您的项目正在使用构面,请查看该部分。 JPA将列出三个方面。 应该选中它,并且右边的下拉列表应该是2.0(或2.1)。
接下来,还有一个JPA标签。 它下面有几个选项卡,但是主要的事情是设置您的JPA版本并指定实现。 这可能是您拉入1.0 jar的地方。
如果启用了构面,请确保两个位置一致。 您可以很容易地使它们不同步,弄清楚它们既令人困惑又烦人。
我终于能够“解决”这个问题-至少让自己重新工作。 这是我所做的:
神奇的是,JPA 1.0不再包含在项目中。 @Terry有一些不错的信息,但根据他的记录,我的配置似乎正确。 我认为这只是一个变通办法,Eclipse Luna内可能存在与此有关的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.