java - 单独项目中的 Google App Engine 实体未进行数据增强

标签 java google-app-engine ant jdo datanucleus

我的应用程序实体位于与主 servlet 不同的单独项目中,并且它们没有经过 DataNucleus 增强。

不确定我是否只是违反了规则或什么,但在项目上设置 ORM 设置并不会增强我的 .class 文件。我的工作区的构建方式是编译项目,然后运行 ​​ant 脚本构建 jar 文件并将它们复制到我的 servlet 的 lib 目录中。

我想,如果必须的话,我可以向我的 ant 脚本中添加一些 java 任务来增强我的 .class 文件。如果是这种情况,该任务的示例将会很有帮助。

我确实想保留我的项目,让我知道我需要做什么来维持它。

这是包含我的实体的项目的 build.xml:

<project default="default">

<property name="appengine.sdk.dir" location="C:\superlongpathtomyeclipseplugins\plugins\com.google.appengine.eclipse.sdkbundle_1.6.5\appengine-java-sdk-1.6.5"/>
<import file="${appengine.sdk.dir}/config/user/ant-macros.xml"/>

<target name="default" depends="dist"/>

<target name="dist">
    <enhance>
        <classpath>
            <pathelement path="${appengine.sdk.home}/lib/*"/>
            <pathelement path="bin"/>
        </classpath>
        <fileset dir="bin" includes="**/*.class" />
    </enhance>
    <jar basedir="bin" destfile="dist\sessionexample.model.jar"/>
</target>
</project>

但现在这是我收到的错误:

java.lang.RuntimeException: Unexpected exception at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76) at com.google.appengine.tools.enhancer.Enhance.(Enhance.java:71) at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74) ... 2 more Caused by: java.lang.NoClassDefFoundError: com/google/appengine/api/datastore/Key at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.lang.Class.getDeclaredMethods(Unknown Source) at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getJavaBeanAccessorAnnotationsForClass(AbstractAnnotationReader.java:238) at org.datanucleus.metadata.annotations.AbstractAnnotationReader.getMetaDataForClass(AbstractAnnotationReader.java:128) at org.datanucleus.metadata.annotations.AnnotationManagerImpl.getMetaDataForClass(AnnotationManagerImpl.java:136) at org.datanucleus.metadata.MetaDataManager.loadAnnotationsForClass(MetaDataManager.java:2278) at org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:385) at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:743) at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:545) at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1252) ... 7 more Caused by: java.lang.ClassNotFoundException: com.google.appengine.api.datastore.Key at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at com.google.appengine.tools.enhancer.EnhancerLoader.loadClass(EnhancerLoader.java:107) at java.lang.ClassLoader.loadClass(Unknown Source) ... 18 more

我需要继续向我的 <classpath> 添加内容吗?直到它起作用?

最佳答案

DataNucleus 项目定义 many ways to run enhancement 。您可以选择最适合您的环境和构建系统的一种。 (我们)不支持该页面上未定义的任何其他方法

关于java - 单独项目中的 Google App Engine 实体未进行数据增强,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11184461/

相关文章:

Ant zip : how to add prefix to all all files/dirs

java - 如何在 Eclipse 中恢复已删除的文件?

java - tomcat 如何为语言环境请求提供 Http,为远程请求提供 https

google-app-engine - GAE 数据存储是否支持 'partial text search' ?

java - 使用 GAE 搜索 API 限制结果

java - Ant build.xml 导致 java.io.IOException : System cannot find the specified file

java - 如何将断言添加到 if ..else 条件

JavaFX SplitPane 不会冒泡鼠标事件

entity-framework - 如何让 Appstats 同时显示小操作和读取操作?

ant - 如何将 VM 属性复制到 ANT 中的 JUnit 任务?