Java 单独项目中的Google应用程序引擎实体未进行数据增强

Java 单独项目中的Google应用程序引擎实体未进行数据增强,java,google-app-engine,ant,jdo,datanucleus,Java,Google App Engine,Ant,Jdo,Datanucleus,我的应用程序实体与主servlet位于一个单独的项目中,它们没有得到DataNucleus的增强 我不确定我是在违反规则还是什么,但是在项目上设置ORM设置并不能增强我的.class文件。构建我的工作区的方式是编译项目,然后运行ant脚本构建jar文件并将它们复制到我的servlet的lib目录中 我想如果必须的话,我可以向我的ant脚本添加一些java任务来增强我的.class文件。如果是这样的话,举一个任务的例子会很有帮助 我真的想保留我的项目,让我知道我需要做什么来保持它 这是包含我的实体

我的应用程序实体与主servlet位于一个单独的项目中,它们没有得到DataNucleus的增强

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

我想如果必须的话,我可以向我的ant脚本添加一些java任务来增强我的.class文件。如果是这样的话,举一个任务的例子会很有帮助

我真的想保留我的项目,让我知道我需要做什么来保持它

这是包含我的实体的项目的my 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:意外异常 位于com.google.appengine.tools.enhancer.enhancer.execute(enhancer.java:76) 位于com.google.appengine.tools.enhancer.Enhance.(Enhance.java:71) 位于com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51) 原因:java.lang.reflect.InvocationTargetException 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于com.google.appengine.tools.enhancer.enhancer.execute(enhancer.java:74) ... 还有两个 原因:java.lang.NoClassDefFoundError:com/google/appengine/api/datastore/Key 位于java.lang.Class.getDeclaredMethods0(本机方法) 位于java.lang.Class.privateGetDeclaredMethods(未知源) 位于java.lang.Class.getDeclaredMethods(未知源) 位于org.datanucleus.metadata.annotations.AbstractAnnotationReader.getJavaBeanAccessorAnnotationsForClass(AbstractAnnotationReader.java:238) 位于org.datanucleus.metadata.annotations.AbstractAnnotationReader.getMetaDataForClass(AbstractAnnotationReader.java:128) 位于org.datanucleus.metadata.annotations.AnnotationManagerImpl.getMetaDataForClass(AnnotationManagerImpl.java:136) 位于org.datanucleus.metadata.MetaDataManager.loadAnnotationsForClass(MetaDataManager.java:2278) 位于org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:385) 位于org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:743) 位于org.datanucleus.enhancer.DataNucleusEnhancer.enhancer(DataNucleusEnhancer.java:545) 位于org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1252) ... 还有7个 原因:java.lang.ClassNotFoundException:com.google.appengine.api.datastore.Key 位于java.net.URLClassLoader$1.run(未知源) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(未知源) 位于java.lang.ClassLoader.loadClass(未知源) 位于com.google.appengine.tools.enhancer.EnhancerLoader.loadClass(EnhancerLoader.java:107) 位于java.lang.ClassLoader.loadClass(未知源) ... 还有18个


我是否需要继续向我的
添加内容,直到它起作用

DataNucleus项目定义。您可以选择哪一个对您的环境最有意义并构建系统。(我们)不支持该页面上未定义的任何其他方法。

最终获得了要运行的ant任务:

<project default="default">

<property name="appengine.sdk.dir" location="c:\pathtoeclipse\eclipse\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="${appengine.sdk.home}/lib/user/*"/>
            <pathelement path="${appengine.sdk.home}/lib/user/orm/*"/>
            <pathelement path="bin"/>
        </classpath>
        <fileset dir="bin" includes="**/*.class" />
    </enhance>
    <jar basedir="bin" destfile="dist\sessionexample.model.jar"/>
</target>
</project>

我想这可能会让我在大部分方面达到目的: