在GAE上将Play应用程序从JDK 6更新到7

时间:2012-09-25 16:43:07

标签: google-app-engine playframework

我一直在使用Play框架开发一个Web应用程序(使用eclipse)。我使用Play 1.2.3和JDK6然后我不得不改变我使用JDK7的开发环境(新的pc)。 我的依赖是:

require:
- play
- play -> crudsiena 2.0.1
- play -> siena 2.0.5
- play -> secure
- play -> gae 1.6
- provided -> opencsv 2.3
- provided -> ddlutils_siena 1.0
- provided -> gae_aws_sdk 1.1.7.1
#- provided -> play 1.2.4
#- provided -> httpclient 4.1.1
#- provided -> httpcore 4.1
repositories: 
- provided: 
   type:       local 
   artifact:   "${application.path}/jar/[module]-[revision].jar" 
   contains: 
     - provided -> * 

更新后,即使在我的本地主机上也无法运行应用程序,所以我开始研究。我发现Play 1.2.3不支持JDK7,所以我改为1.2.4。然后我还将Siena版本更新为2.0.7,并将以下行包含在我的application.conf中:

java.source=1.7

我甚至用play创建了一个新项目,并将必要的文件复制到新项目中。 我设置了正确的JAVA_HOME环境变量。我的localhost上的应用程序工作正常。但是当我在Google App Engine上更新版本时,我仍然会收到以下错误:

Uncaught exception from servlet
java.lang.UnsupportedClassVersionError: controllers/Admin : Unsupported major.minor version 51.0
at com.google.appengine.runtime.Request.process-1921becf6a885374(Request.java)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:174)
at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:118)
at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:401)
at play.Play.preCompile(Play.java:570)
at play.Play.init(Play.java:299)
at play.server.ServletWrapper.contextInitialized(ServletWrapper.java:77)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:452)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:459)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:701)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:336)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:328)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:456)
at java.lang.Thread.run(Thread.java:679)

我确实知道它与从JDK6到JDK7的过渡有关,但是我不知道在哪里可以看到为了让应用程序在GAE上运行。此外,eclipse中的编译器设置为1.7。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

要在App Engine上使用Java,您必须使用JDK 6: https://developers.google.com/appengine/docs/java/overview

他们在问题跟踪器中遇到了问题:http://code.google.com/p/googleappengine/issues/detail?id=6972

抱歉!但我认为你必须改变。

(请注意,现在这是正确的。我怀疑Google有某种升级计划,但我还没有听到任何关于Java 7的声明。他们可能会有一个有限的"值得信赖的测试人员& #34;在普遍可用之前的相当长的时间内为此计划。)