【问题标题】:Starting App Engine Standard at localhost has encountered a problem - failed to start在 localhost 启动 App Engine Standard 时遇到问题 - 无法启动
【发布时间】:2020-12-04 13:32:21
【问题描述】:

我已经在我的机器上安装了 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 下运行.)

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

我立即前往 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 来验证功能。

几秒钟后,会显示一个错误对话框,说明:

“在 localhost 启动 App Engine Standard”遇到了问题。 本地主机上的服务器 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

【问题讨论】:

  • 为什么说不能使用旧的JDK?
  • 我无法在 openjdk.java.net 上找到适用于 Windows 的安装二进制文件,但是,我确实可以从 Oracle 获得我需要的东西。

标签: java eclipse google-app-engine google-cloud-sdk


【解决方案1】:

我发现此answer 与您的情况类似,建议使用此documentation 从 java 8 迁移到 java 11,希望对您有所帮助。

【讨论】:

【解决方案2】:

App Engine Standard 开发服务器仅支持 Java 8。您可以从 AdoptOpenJDK.net、Azul's Zulu 等多个地方下载 Java 8 JRE(或 JDK)。

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

  1. 打开首选项> Java > 已安装的JRE。如果找不到您的 Java 8 VM,请选择添加或搜索。
  2. 打开 Preferences > Java > Installed JREs > Execution Environments 并选择 JavaSE-1.8,并确保您的 Java 8 VM 被选中为默认 VM。

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

【讨论】:

  • 这行得通,但是我必须做一些家务才能到达那里。除了 AdoptOpenJDK,我还有一个 Java 13 和一个 Java 8。当我删除除了 AdoptOpenJDK 之外的所有内容时,一切都开始工作了。感谢@brian 的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2019-02-24
  • 2022-10-25
  • 2020-05-07
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多