【问题标题】:Google App Engine entities in a separate project are not being dataenhanced未对单独项目中的 Google App Engine 实体进行数据增强
【发布时间】:2012-06-26 10:05:59
【问题描述】:

我的应用程序实体与我的主 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 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74) ... 2 更多 引起: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.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(未知来源) 在 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 更多

我是否需要继续向我的&lt;classpath&gt; 添加内容直到它起作用?

【问题讨论】:

标签: java google-app-engine ant jdo datanucleus


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    终于有一个蚂蚁任务要运行了:

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

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 2011-04-25
      • 2013-01-11
      • 1970-01-01
      • 2012-08-17
      • 2010-12-03
      • 2014-03-20
      • 2011-01-20
      • 1970-01-01
      相关资源
      最近更新 更多