【发布时间】:2012-07-01 22:10:27
【问题描述】:
在使用 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,我可以手动将其设置为工作。现在似乎没有任何工作。有什么建议吗?
【问题讨论】:
-
什么“DataNucleus 2”? DataNucleus 当前版本为 3.0 和 3.1。 Google 插件版本为 v 2.0.1.1(使用 DataNucleus v3.0.x)
-
啊,对。是的,包含的 DataNucleus 版本是 v3.0.x。我能够通过手动从 GAE 1.7.0 版中的 src 和 lib 中删除 v1 库来使其工作,以便 GAE 停止尝试将它们放入 WEB-INF/lib 中。我在类路径上与 v3 和 v1 DataNucleus 库发生冲突。 GAE 声明您可以添加一个增强器标志来告诉它要使用哪些版本,但我看不到如何在 Eclipse 中使用该标志来阻止它复制这些库。所以解决方法似乎对我有用。这并不理想,但它会起作用。
-
@DataNucleus 当我浏览 appengine 1.7 文件夹时,Datanucleus jar 是 datanucleus-core-1.1.5.jar、datanucleus-jpa-1.1.5 等。Google 插件使用是什么意思Datanucleus v3.0.x?
-
@DataNucleus 嗯,有v2文件夹,但是如何强制谷歌插件使用v2?
-
好的,无需破解 GAE 版本即可正常工作。我在 com.google.appengine.eclipse.core.prefs 文件中的 .settings 文件夹中找到了 eclipse 的标志,并将此标志更改为使用 v2。 gaeDatanucleusVersion=v2 然后在启动eclipse之后。在 JPA 下的 window-preferences-DataNucleus 下,我从 appengine-java-sdk-1.7.x/lib/opt/tools/datanucleus/v2 添加了 asm-3.x.x.jar 和 datanucleus-enhancer-3.x.x.jar。现在它正在使用正确的增强器并为该版本找到正确的增强器类。
标签: google-app-engine jpa-2.0 datanucleus