Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DataNucleus增强失败-Android Studio中的GAE_Java_Google App Engine_Datanucleus_Appengine Gradle Plugin - Fatal编程技术网

Java DataNucleus增强失败-Android Studio中的GAE

Java DataNucleus增强失败-Android Studio中的GAE,java,google-app-engine,datanucleus,appengine-gradle-plugin,Java,Google App Engine,Datanucleus,Appengine Gradle Plugin,我最近将一个应用引擎项目从Eclipse迁移到Android Studio。不幸的是,appengineEnhancegradle任务失败 我已经发现可能存在版本不匹配,因为v2libs中不应该出现org.datanucleus.OMFContext。因此,我猜某些依赖项引用的是datanucleus-…-1.1.5,而不是datanucleus-…-3.1.3,但我无法解决这个问题 使用--info记录输出: Stacktrace来自日志文件: java.lang.RuntimeExcepti

我最近将一个应用引擎项目从Eclipse迁移到Android Studio。不幸的是,
appengineEnhance
gradle任务失败

我已经发现可能存在版本不匹配,因为v2libs中不应该出现
org.datanucleus.OMFContext
。因此,我猜某些依赖项引用的是
datanucleus-…-1.1.5
,而不是
datanucleus-…-3.1.3
,但我无法解决这个问题

使用--info记录输出:

Stacktrace来自日志文件:

java.lang.RuntimeException: Unexpected exception
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
    at com.google.appengine.tools.enhancer.Enhance.<init>(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(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    ... 2 more
Caused by: java.lang.NoSuchMethodError: org.datanucleus.plugin.PluginManager.<init>(Lorg/datanucleus/PersistenceConfiguration;Lorg/datanucleus/ClassLoaderResolver;)V
    at org.datanucleus.OMFContext.<init>(OMFContext.java:159)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:172)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:150)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1157)
    ... 7 more
编辑: 我可以验证流程是否使用v1jar(尽管应该使用v2,如build.gradle中所述)。 从
.gradle\appengine sdk\appengine-java-sdk-1.9.42\lib\opt\tools\datanucleus
中删除v1文件夹时,任务失败,出现以下异常:

java.lang.NullPointerException: ormLibs cannot be null
    at com.google.appengine.tools.enhancer.EnhancerLoader.removeOrmLibs(EnhancerLoader.java:66)
    at com.google.appengine.tools.enhancer.EnhancerLoader.getClassPath(EnhancerLoader.java:43)
    at com.google.appengine.tools.enhancer.EnhancerLoader.<init>(EnhancerLoader.java:37)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:69)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
java.lang.NullPointerException:ormLibs不能为null
位于com.google.appengine.tools.enhancer.EnhancerLoader.removeOrmLibs(EnhancerLoader.java:66)
位于com.google.appengine.tools.enhancer.EnhancerLoader.getClassPath(EnhancerLoader.java:43)
位于com.google.appengine.tools.enhancer.EnhancerLoader.(EnhancerLoader.java:37)
位于com.google.appengine.tools.enhancer.enhancer.execute(enhancer.java:69)
位于com.google.appengine.tools.enhancer.Enhance.(Enhance.java:71)
位于com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)

我也有类似的问题。您需要为增强器添加更多依赖项。这是我的build.gradle文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.google.appengine:gradle-appengine-plugin:1.9.42'
    }
}

repositories {
    jcenter();
}

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'

war.dependsOn appengineEnhance

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.42'
    compile group: 'com.google.apis', name: 'google-api-services-oauth2', version: 'v1-rev120-1.22.0'
    compile group: 'com.google.http-client', name: 'google-http-client', version: '1.22.0'
    compile group: 'com.google.http-client', name: 'google-http-client-appengine', version: '1.22.0'
    compile group: 'com.google.http-client', name: 'google-http-client-jdo', version: '1.22.0'
    compile group: 'com.google.http-client', name: 'google-http-client-gson', version: '1.22.0'
    compile group: 'commons-io', name: 'commons-io', version: '2.5'
    compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.2'
    compile group: 'com.google.appengine.orm', name: 'datanucleus-appengine', version: '2.1.2'
    compile 'org.apache.geronimo.specs:geronimo-jpa_2.0_spec:1.0'
    compile 'javax.servlet:servlet-api:2.5'
    compile 'javax.transaction:jta:1.1'
    compile 'com.google.code.gson:gson:2.4'
}


appengine {
    downloadSdk = true
    appcfg {
        oauth2 = true
    }
    enhancer {
        version = "v2"
        api="jdo"
        enhanceOnBuild = true
    }
}
 /*
 * This build file was auto generated by running the Gradle 'init' task
 * by 'buls' at '8/30/16 11:36 PM' with Gradle 2.13
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * user guide available at https://docs.gradle.org/2.13/userguide/tutorial_java_projects.html
 */

// Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'com.google.appengine:gradle-appengine-plugin:1.9.42'
  }
}

def appEmail = "${appEmail}"

repositories {
    jcenter()
}


dependencies {

    compile 'org.slf4j:slf4j-api:1.7.21'

    testCompile 'junit:junit:4.12'
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.0'
    compile 'javax.servlet:servlet-api:2.5'
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.0'
    compile 'com.google.code.gson:gson:2.2.2'
    compile 'commons-codec:commons-codec:1.10'
    compile 'org.json:json:20160810'

    compile 'org.ow2.asm:asm:4.0'    
    compile 'com.google.appengine:appengine-api-labs:1.9.0'    
    compile 'com.google.appengine:appengine-jsr107cache:1.9.0'
    compile 'org.datanucleus:datanucleus-api-jpa:3.1.3'
    compile 'org.datanucleus:datanucleus-api-jdo:3.1.3'
    compile 'com.google.appengine.orm:datanucleus-appengine:2.1.2'
    compile 'org.datanucleus:datanucleus-core:3.1.3'
    compile 'org.apache.geronimo.specs:geronimo-jpa_2.0_spec:1.0'
    compile 'javax.jdo:jdo-api:3.0.1'
    compile 'javax.transaction:jta:1.1'            
    compile 'net.sf.jsr107cache:jsr107cache:1.1'

}

appengine {
    httpPort = 8888
    downloadSdk = true
    appcfg {
        email = "${appEmail}"
        noCookies = false
        oauth2 = true
    }
    enhancer { 
        version = "v2"
        enhanceOnBuild = true 
        api = "jdo"
    }
}

好的,这是一个与最新版本的AppEngineJavaSDK相关的应用程序

降低线路等级

appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.42'
以下

appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.38'

解决了所有错误,增强工作正常。

您使用什么“datanucleus”JAR进行增强?因为例外情况是,无论谷歌的“流程”是什么,你都有错误的。它在PluginManager上查找在“datanucleus”版本3 IIRC中删除的方法。是什么点燃了火焰?那将是一个值得一看的地方。然后使用datanucleus core、enhancer和api jdo(均为3.1.1版)向谷歌报告问题。这些也是appengine java sdk工具(v2)的一部分。我手动触发了该任务,但它也是正常构建任务的一部分(请参阅build.gradle)。如上所述,我猜由于对OMFContext的引用,该流程使用了旧版本的datanucleus libs。我只是不知道在哪里或者为什么。通常建议不要在AppEngine上的数据存储中使用JPO/JDA。像Objectify这样一种与外观更兼容的ORM是首选机制。我在较新的项目中使用Objectify,但这一个必须迁移,重写整个数据层太耗时了。不过我同意你的看法。
1.9.0
是一个非常旧的版本。你是说
1.9.40
?实际上,我是说1.9.0。你说得对,我没注意到它已经过时了。最新版本是1.9.38,我更新了答案。
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.38'