Eclipse中Google App Engine本地服务器启动失败(升级gcloud SDK后)
App Engine标准应用升级gcloud SDK后启动失败:NoClassDefFoundError: com/google/apphosting/runtime/SessionStore
我的App Engine标准应用截至今日上午运行正常,升级gcloud SDK至45.0.0版本后突然无法启动,抛出如下错误:
INFO: Overwriting system property key 'java.util.logging.config.file', value '/Users/sharon/Library/Application Support/google-cloud-tools-java/managed-cloud-sdk/LATEST/google-cloud-sdk/platform/google_appengine/google/appengine/tools/java/config/sdk/logging.properties' with value 'WEB-INF/logging.properties' from '/Users/sharon/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/Lily/WEB-INF/appengine-web.xml' 2023-10-12 17:45:17.863:INFO::main: Logging initialized @768ms to org.eclipse.jetty.util.log.StdErrLog 2023-10-12 17:45:17.936:WARN:oejs.AbstractConnector:main: Ignoring deprecated socket close linger time Exception in thread "main" java.lang.NoClassDefFoundError: com/google/apphosting/runtime/SessionStore at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:756) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:117) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at com.google.apphosting.runtime.jetty9.SessionManagerHandler.create(SessionManagerHandler.java:75) at com.google.appengine.tools.development.jetty9.JettyContainerService.startContainer(JettyContainerService.java:360) at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:293) at com.google.appengine.tools.development.AutomaticInstanceHolder.startUp(AutomaticInstanceHolder.java:42) at com.google.appengine.tools.development.AbstractModule.startup(AbstractModule.java:102) at com.google.appengine.tools.development.Modules.startup(Modules.java:118) at com.google.appengine.tools.development.DevAppServerImpl.doStart(DevAppServerImpl.java:280) at com.google.appengine.tools.development.DevAppServerImpl.access$000(DevAppServerImpl.java:57) at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:229) at com.google.appengine.tools.development.DevAppServerImpl$1.run(DevAppServerImpl.java:227) at java.security.AccessController.doPrivileged(Native Method) at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:227) at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:381) at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:58) at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:239) at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:230) Caused by: java.lang.ClassNotFoundException: com.google.apphosting.runtime.SessionStore at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at com.google.appengine.tools.development.DevAppServerClassLoader.loadClass(DevAppServerClassLoader.java:117) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ... 28 more
但新建的另一个App Engine标准应用可正常运行,请问该错误的可能原因是什么?
可能的原因及解决思路
- 依赖版本不兼容:gcloud SDK 45.0.0对App Engine Java运行时的依赖库做了调整,现有项目中旧的SDK依赖(如
appengine-api-1.0-sdk)和新版SDK不匹配,导致找不到SessionStore类。 - 本地缓存/构建文件过期:升级SDK后,Eclipse服务器临时目录、Maven/Gradle依赖缓存残留旧版本文件,和新版SDK冲突。
- 应用配置差异:现有项目的
appengine-web.xml存在自定义设置(如日志配置覆盖),这些配置在新版SDK下引发类加载问题,而新项目使用默认配置不受影响。
具体解决步骤
- 同步依赖版本
查看gcloud version输出的App Engine组件版本,将项目中appengine-api-1.0-sdk、appengine-tools-sdk等依赖的版本调整为对应版本。 - 清理本地缓存
- 删除Eclipse服务器临时目录(日志中
/Users/sharon/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/),重启服务器。 - 执行
mvn clean install或gradle clean build清除旧构建产物和依赖缓存。
- 删除Eclipse服务器临时目录(日志中
- 检查配置文件
对比新项目的appengine-web.xml,注释现有项目中非必要的自定义配置(如日志配置覆盖),重启应用验证。 - 降级SDK验证
若上述方法无效,可执行gcloud components update --version=44.0.0降级SDK,确认是否为新版本兼容性问题。
内容的提问来源于stack exchange,提问作者helloi
相关产品推荐
相关产品推荐

