0

我一直在使用 play framework 开发一个 web 应用程序(使用 eclipse)。我使用的是 Play 1.2.3 和 JDK6,然后我不得不更改使用 JDK7 的开发环境(新电脑)。我的依赖是:

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 环境变量。我的本地主机上的应用程序运行良好。但是,当我在 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。

请帮我解决这个问题。

4

1 回答 1

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 的任何公告。他们可能会为此提供一个有限的“受信任的测试人员”程序,对于一个重要的一般可用性之前的时间量。)

于 2012-09-25T19:47:26.490 回答