1

私は最近App EngineプロジェクトをEclipseからAndroid Studioに移行しました。残念ながら、appengineEnhanceのgradleタスクは失敗します。DataNucleusの強化に失敗 - AndroidスタジオのGAE

バージョンの不一致があることがすでにわかっています。org.datanucleus.OMFContextはv2のライブラリには存在しないはずです。だから私はいくつかの依存関係がdatanucleus-...-3.1.3の代わりにdatanucleus-...-1.1.5を参照していると思いますが、私はこの問題を解決できません。 --infoと

ログ出力:

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

編集:私は確認することができます

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. 

スタックトレースログファイルからプロセスがv1 jarを使用していること(althou build.gradleに記載されているように、gh v2を使用する必要があります)。 .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) 
+0

エンハンストに使用する「データ核」ジャーは何ですか?例外は、Googleの「プロセス」が何であっても間違っていると言うためです。 PluginManager上で "datanucleus"バージョン3 IIRCの周りで削除されたメソッドを探します。エンハンスメントから何が消えますか?それは見るべき場所になります。そして、問題をGoogleに報告してください。 –

+0

datanucleus core、enhancer、api-jdo(すべてのバージョン3.1.1)を使用しました。これらはappengine-java-sdkツール(v2)の一部です。手動でタスクを起動しましたが、通常のビルドタスクの一部でもあります(build.gradleを参照)。 上記のように、OMFContextへの参照のために、このプロセスでdatanucleusライブラリの古いバージョンが使用されていると思います。私はちょうどどこか理由を理解できません。 – Steppschuh

+0

AppEngineでは、JPO/JDA for Datastoreを使用することをお勧めします。 Objectifyのようなappengine互換のORMが推奨される仕組みです。 – loosebazooka

答えて

2

さてさて、これはApp EngineのJavaのSDKの最新バージョンに関連issueで判明:ここに私のbuild.gradleファイルです。次

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

にライン

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

のダウングレード

は、すべてのエラーを解決し、増強が正常に動作します。

+0

'1.9.0'は**古いバージョンです。 '1.9.40'ですか? –

+0

実際、私は1.9.0を意味しました。あなたは正しい、私はそれが時代遅れであることに気付かなかった。動作する最新バージョンは1.9.38です、私は答えを更新しました。 – Steppschuh

1

私は同様の問題がありました。エンハンサーの依存関係をさらに追加する必要があります。 、

/* 
* 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" 
    } 
} 
関連する問題