【发布时间】:2022-01-25 04:05:01
【问题描述】:
尝试使用适用于 Eclipse 的 Google Cloud Tools 运行在 Eclipse 中运行的本地 Google App Engine 的基本设置,但在使用 Run As -> App Engine 选项启动服务器时,我不断收到以下错误。
我相信我的环境很好,因为我能够使用 java_dev_appserver 命令从命令行使用本地应用服务器运行测试应用程序,因此问题似乎特定于 Eclipse 环境。
at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:383)
at com.google.appengine.tools.development.DevAppServerFactory.createDevAppServer(DevAppServerFactory.java:315)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:385)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:59)
at com.google.appengine.tools.development.DevAppServerMain.run(DevAppServerMain.java:259)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:250)
Caused by: java.lang.ExceptionInInitializerError
at com.google.appengine.tools.development.DevAppServerImpl.<init>(DevAppServerImpl.java:136)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at com.google.appengine.tools.development.DevAppServerFactory.doCreateDevAppServer(DevAppServerFactory.java:368)
... 5 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make static java.net.URLStreamHandler java.net.URL.getURLStreamHandler(java.lang.String) accessible: module java.base does not "opens java.net" to unnamed module @49c43f4e
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at com.google.appengine.tools.development.StreamHandlerFactory.<clinit>(StreamHandlerFactory.java:53)
... 12 more
我从一台干净的 Windows 11 机器开始,安装了 Google Cloud SDK,添加了 app-engine-java 组件,配置了一个项目,通过使用 CLI 部署到云端进行了测试,安装了 Eclipse,添加了 Google Tools for Eclipse 插件,使用 Google 插件 Create Project -> Google App Engine Standard 项目创建了一个示例项目,并尝试运行它。
这可能很简单,但我想不通。
【问题讨论】:
-
什么版本的Java?最新的 Java 版本,尤其是 Java 17,对于不允许代码干扰 JDK 内部结构更加严格。
-
好问题。我使用的是默认的 v17 JRE。我重新安装了较旧的 JRE (v11),它现在可以工作了。