在 localhost 启动 App Engine Standard 时遇到问题 - 无法启动

Starting App Engine Standard at localhost has encountered a problem - failed to start

我已经在我的机器上安装了 OpenJDK:java - CLI 的版本产生以下内容:

C:\java -version
openjdk version "13" 2019-09-17
OpenJDK Runtime Environment (build 13+33)
OpenJDK 64-Bit Server VM (build 13+33, mixed mode, sharing)

(我怀疑 openjdk 13 是根本问题,但由于没有明显的方法可以使用较旧的 JDK,例如 8,我希望 Eclipse 和 Google在最新版本的openjdk下会运行。)

我全新安装了 Eclipse IDE Enterprise Java Developers 2020-06 (4.16.0)。

我立即转到 Eclipse Marketplace 并安装了 Google Cloud Tools for Eclipse 1.8.3。我等了几分钟安装完成。

然后我收到通知,提示需要 Google Cloud SDK,安装将立即开始。我等着它完成。

为了验证安装,我创建了一个新的 Google App Engine Standard java 项目,它生成了一个基本的 Hello World 网页和相应的 servlet。我没有更改任何代码、配置或首选项。

我试图通过选择 DEBUG AS > APP ENGINE 来验证功能。

几秒钟后,显示一个错误对话框,指出:

'Starting App Engine Standard at localhost'遇到了问题。 本地主机上的服务器 App Engine Standard 无法启动。

单击“详细信息”按钮会提供相同的信息。

控制台窗格中显示以下内容:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.appengine.tools.development.StreamHandlerFactory (file:/C:/Users/Jeff.Thurston/AppData/Local/google/ct4j-cloud-sdk/LATEST/google-cloud-sdk/platform/google_appengine/google/appengine/tools/java/lib/impl/appengine-local-runtime.jar) to method java.net.URL.getURLStreamHandler(java.lang.String)
WARNING: Please consider reporting this to the maintainers of com.google.appengine.tools.development.StreamHandlerFactory
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
java.lang.RuntimeException: Unable to create a DevAppServer
    at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:369)
    at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:301)
    at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:383)
    at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:45)
    at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:257)
    at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:248)
Caused by: java.lang.ExceptionInInitializerError
    at com.google.appengine.tools.development.DevAppServerImpl.<init>(DevAppServerImpl.java:124)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:354)
    ... 5 more
Caused by: java.lang.IllegalStateException: java.lang.NoSuchMethodException: java.net.SocksSocketImpl.<init>()
    at com.google.appengine.tools.development.DevSocketImplFactory.<clinit>(DevSocketImplFactory.java:76)
    ... 12 more
Caused by: java.lang.NoSuchMethodException: java.net.SocksSocketImpl.<init>()
    at java.base/java.lang.Class.getConstructor0(Class.java:3350)
    at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2554)
    at com.google.appengine.tools.development.DevSocketImplFactory.<clinit>(DevSocketImplFactory.java:72)
    ... 12 more

我找到了这个 to a case similar to yours where it is recommended to migrate from java 8 to java 11 using this documentation,希望对您有所帮助。

App Engine 标准开发服务器仅支持 Java 8。您可以从许多地方下载 Java 8 JRE(或 JDK),例如 AdoptOpenJDK.net , Azul 的 Zulu, 或其他。

安装 Java 8 JRE 后,您需要配置 Eclipse 才能使用此 JRE 启动开发服务器:

  1. 打开 首选项 > Java > 安装的 JRE。如果找不到您的 Java 8 VM,请选择添加或搜索。
  2. 打开 首选项 > Java > 已安装的 JRE > 执行环境 和 select JavaSE-1.8,并确保你的 Java 8 VM 被选中为默认 VM。

然后您应该能够重新启动您的应用程序,它应该使用新的 JRE。