【问题标题】:Eclipse Google Cloud plugin Unable to start DevAppServer: InaccessibleObjectException: Unable to make static java.net.URLStreamHandlerEclipse Google Cloud 插件无法启动 DevAppServer:InaccessibleObjectException:无法制作静态 java.net.URLStreamHandler
【发布时间】: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),它现在可以工作了。

标签: eclipse plugins local


【解决方案1】:

这个问题发生在 JRE v17 上,它默认安装在 Eclipse 2021-12 中。使用 JRE v11 安装 Eclipse 解决了这个问题。感谢 greg-449 让我走上正轨。

【讨论】:

    【解决方案2】:

    将 JVM 降级到 jdk-11.0.13 也为我解决了这个问题。

    由于我没有卸载 JRE v17,我不得不更改我的 eclipse.ini 文件以指向 JDK 11,然后更新已安装 JRE 的 Eclipse 工作区设置以包含 JDK 11,并更新我的工作区属性以使用它默认版本而不是 JRE 17。我还将 JDK 合规性设置更新为 JDK 11 而不是 17,并禁用了想要仍使用 17 的“发布”设置。

    感谢这篇文章。几天来我一直在解决这个问题,升级/降级库等。

    【讨论】:

      猜你喜欢
      • 2018-10-12
      • 2016-12-26
      • 1970-01-01
      • 2012-07-04
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多