Datanucleus在Google App Engine 1.7中使用了错误的增强器

时间:2012-07-01 22:10:27

标签: google-app-engine jpa-2.0 datanucleus

在使用Datanucleus插件在Eclipse中使用GAE 1.7.0增强类时,我很难让Datanucleus 2正常工作。当我按照这里的手动步骤时,这在旧版GAE中运行良好:

http://www.datanucleus.org/products/accessplatform/guides/eclipse/index.html

但是自升级以来,GAE现在包含了这些库(它们的新版本看起来像),并且GAE还有一个可以设置的新“增强器”标志。我无论如何都无法在Eclipse中设置此标志。当我想要V2库并且Datanucleus根据这个错误发生冲突时,似乎GAE仍然包括v1库:

Jul 1, 2012 5:59:55 PM org.datanucleus.enhancer.DataNucleusEnhancer <init>
INFO: DataNucleus Enhancer : Using ClassEnhancer "ASM" for API "JPA"
Exception in thread "main" java.lang.NoSuchFieldError: NUCLEUS_CONTEXT_LOADER
    at org.datanucleus.NucleusContext.<clinit>(NucleusContext.java:73)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:171)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1265)

我尝试过很多不同的事情。我尝试过使用所有默认设置。我已经尝试将v2库添加到Datanucleus运行时类路径条目。我试过在src和libs中删除GAE 1.7.0 SDK中的v1库。但不知怎的,GAE仍在继续(或者试图超越V1库。我甚至尝试过手动设置配置的旧方法,如上面链接所指定的那样。有点令人沮丧,因为我现在好像现在在我根本无法使用这些库的情况下。至少对于旧版本的GAE,我可以手动设置它。现在似乎没什么用。有什么建议吗?

1 个答案:

答案 0 :(得分:8)

我遇到了同样的错误,并且能够通过以下方式在我的项目中解决它:

  • 执行DavidB在评论中建议的内容,而不修改首选项中的DataNucleus JPA设置。
  • 从war / WEB-INF / lib
  • 删除所有“V1”罐子

要澄清DavidB的建议,请打开包含项目的目录。将有一个名为“.settings”的文件夹,打开它并编辑com.google.appengine.eclipse.core.prefs。只需将第三行从 gaeDatanucleusVersion = v1 更改为 gaeDatanucleusVersion = v2

完成此操作后,从war / WEB-INF / lib目录中删除以下jar:

  • DataNucleus将-的AppEngine-1.0.10.final.jar
  • DataNucleus将核 - 1.1.5.jar
  • DataNucleus将-JPA-1.1.5.jar
  • 的geronimo-jpa_3.0_spec-1.1.1.jar
  • 的geronimo-jta_1.1_spec-1.1.1.jar
  • JDO2-API-2.3-eb.jar

重启eclipse,你应该好好去。