Eclipse Google -App -Engine“不会增强”

时间:2010-10-14 09:41:24

标签: java eclipse google-app-engine

第一次Eclipse:

无法摆脱这个错误...... 已尝试过google上的所有建议修复程序..

持久化类“com.blahb.blahblah.master.UserToken类似乎没有得到增强。您可能需要重新运行增强器并检查输出中的错误。”数据库中没有表,但操作需要它。请检查此类的MetaData规范。

List of 500 lines of exceptions...
*Caused by:
javax.jdo.JDOUserException: Persistent class "Class com.blahb.blahblah.master.UserToken does not seem to have been enhanced.  You may want to rerun the enhancer and check for errors in the output." has no table in the database, but the operation requires it. Please check the specification of the MetaData for this class.
    at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:375)
    at org.datanucleus.jdo.JDOQuery.execute(JDOQuery.java:230)
    at com.gulfnet.gulfstar.master.Master.getUserToken(Master.java:645)
    at org.apache.jsp.top_jsp._jspService(top_jsp.java:68)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
    at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet*

我的同事在她的Windows PC上有同样的项目,它运行良好......

我尝试了三种不同的PC的linux,mac,windows,3种不同的eclipse版本,20种不同的导入方式,创建新项目等等....

是的,更正了.classpath以反映所有jar文件的正确位置。 我已经尝试将google博客中建议的每个单独的类java,jar添加到类/ buildpath(窗口 - > pref - > google - > orm)中......

这个该死的“Enhancer控制台”在哪里,假设是在Eclipse ......? 我正在使用所有Google-app-engine插件运行最新的Eclipse ..

任何想法......?任何人..?

谢谢!

7 个答案:

答案 0 :(得分:3)

问题是,DataNucleus的Enhancer会从项目的Builders列表中删除。对我来说,所有项目清洁,重建等都没有帮助。你需要做的是(1)创建新的样本GAE项目,在纯文本编辑器中打开该项目的“.project”文件,从那里复制这个文本:

<buildCommand>
    <name>com.google.appengine.eclipse.core.enhancerbuilder</name>
    <arguments></arguments>
</buildCommand>

现在将其复制到您自己的.project文件中的构建器列表的底部。现在DataNucleus应该可以正常工作。我不知道为什么它有时会消失。

答案 1 :(得分:1)

我们编辑了[Project&gt;属性&gt; Google&gt; App Engine&gt; ORM]页面删除 src / 并仅增强我们类的子集( src / com / vo / .java *, src / com / back / ? res / ),如下所述: datanucleus enhancer & javaw: "the parameter is incorrect"

我们还将Google | App Engine复制到较短的路径,如下所述,对我们有用: http://code.google.com/p/google-web-toolkit/issues/detail?id=4395#c15

答案 2 :(得分:1)

右键单击项目,然后单击属性&gt;建设者。是否有点像“Missing Builder(org.datanucleus.ide.eclipse.enhancerbuilder)”

如果您创建新的Web应用程序项目,请确保选中“使用Google Web Toolkit”和“使用Google App Engine”,然后再次查看“属性”&gt;建设者,然后在那里说“Enhancer”而不是“Missing builder”?

如果是,那么确定的解决方案是从头开始创建一个新项目,然后手动将旧项目中的内容转移到新项目中。简单地将旧项目导入另一个Eclipse不起作用,增强器仍然不存在。

答案 3 :(得分:1)

更新到最新版本的appengine java sdk解决了它。

答案 4 :(得分:1)

更改SDK版本对我有用。

有趣的是,我已经在使用最新版本了。恢复到以前的版本是我能够触发“增强”的唯一方式。步。这是使用gradle构建脚本。

答案 5 :(得分:0)

我遇到了同样的错误,在我的案例中,解决方案只是通过评论此行来使类不持久:

@PersistenceCapable(identityType = IdentityType.APPLICATION)

然后运行我的应用程序并获得有关持久性的错误,停止它,取消注释前一行并再次运行应用程序。

答案 6 :(得分:0)

通过添加主键解决了这个问题,如下所示:

@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id;