1

Недавно я перенес проект App Engine из Eclipse в Android Studio. К сожалению, задача градиента appengineEnhance не выполняется.Усиление DataNucleus - GAE в Android Studio

Я уже понял, что может быть несоответствие версии, поскольку org.datanucleus.OMFContext не должен присутствовать в v2 libs. Поэтому я предполагаю, что некоторая зависимость ссылается на datanucleus-...-1.1.5 вместо datanucleus-...-3.1.3, но я не могу решить эту проблему.

Выход Вход с --info:

Executing task ':backend:appengineEnhance' (up-to-date check took 0.0 secs) due to: 
    Task has not declared any outputs. 
App Engine SDK root = C:\Users\NTBDE\.gradle\appengine-sdk\appengine-java-sdk-1.9.42 
Java classpath = C:\Users\NTBDE\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv\gradle-2.14.1\lib\gradle-launcher-2.14.1.jar;C:\Users\NTBDE\.gradle\appengine-sdk\appengine-java-sdk-1.9.42\lib\appengine-tools-api.jar 
Webapp source directory = C:\Users\sschultz\Documents\Projects\IntelliQ\Android\IntelliQ\backend\src\main\webapp 
Enhancing DataNucleus classes... 
[ant:enhance] [newrelic.info] Deinstrumenting... 
[ant:enhance] Encountered a problem: Unexpected exception 
[ant:enhance] Please see the logs [C:\Users\sschultz\AppData\Local\Temp\enhance2770794418099399278.log] for further information. 
Finished enhancing DataNucleus classes. 
:backend:appengineEnhance FAILED 
:backend:appengineEnhance (Thread[Daemon worker Thread 7,5,main]) completed. Took 0.589 secs. 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':backend:appengineEnhance'. 
> An error occurred enhancing DataNucleus classes. 

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 

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

Edit: я могу проверить что процесс использует банки v1 (althou gh v2, как указано в build.gradle). При удалении папки v1 от .gradle\appengine-sdk\appengine-java-sdk-1.9.42\lib\opt\tools\datanucleus, задачи не удается за исключением следующего:

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) 
+0

Какие баннеры "datanucleus" вы используете для улучшения? Потому что исключение говорит, что у вас неправильные для любого процесса Google. Он ищет метод PluginManager, который был удален вокруг «datanucleus» версии 3 IIRC. Что упирается в улучшение? это будет место для просмотра. А затем сообщите о проблеме в Google –

+0

Я использовал ядро ​​datanucleus, энхансер и api-jdo (все версии 3.1.1). Они также являются частью инструментов appengine-java-sdk (v2). Я запускал задачу вручную, но это также часть обычной задачи сборки (см. Build.gradle). Как упоминалось выше, я предполагаю, что этот процесс использует более старые версии библиотек datanucleus из-за ссылки на OMFContext. Я просто не могу понять, где и почему. – Steppschuh

+0

Обычно рекомендуется использовать JPO/JDA для Datastore на AppEngine. Наиболее предпочтительным механизмом является ORM, совместимый с appengine, например Objectify. – loosebazooka

ответ

2

Хорошо, оказывается, это issue связано с последней версией App Engine Java SDK.

Downgrading линии

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

к следующему

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

решены все ошибки и усиливающий работает отлично.

+0

'1.9.0' является ** ужасно ** старой версией. Вы имеете в виду '1.9.40'? –

+0

Вообще-то, я имел в виду 1.9.0. Вы правы, я не заметил, что это устарело. Последняя версия, которая работает, составляет 1.9.38, я обновил ответ. – Steppschuh

1

У меня была аналогичная проблема. Вам нужно добавить дополнительные зависимости для энхансера. Вот мой build.gradle файл:

/* 
* 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" 
    } 
}