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

时间:2012-06-25 06:37:03

标签: 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:意外的异常       在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       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)       在com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)       ......还有2个   引起: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)       在org.datanucleus.metadata.MetaDataManager.loadClasses(MetaDataManager.java:385)       at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:743)       在org.datanucleus.enhancer.DataNucleusEnhancer.enhance(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(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.net.URLClassLoader.findClass(Unknown Source)       at java.lang.ClassLoader.loadClass(Unknown Source)       在com.google.appengine.tools.enhancer.EnhancerLoader.loadClass(EnhancerLoader.java:107)       at java.lang.ClassLoader.loadClass(Unknown Source)       ......还有18个

我需要继续向我的<classpath>添加内容,直到它有效吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

最后得到了一个蚂蚁任务:

<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>