You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google App Engine Java 17:设置JAVA_OPTS无效,反射异常求助

解决Java 17 GAE应用启动时的InaccessibleObjectException错误

针对你遇到的模块访问限制错误,以下是几种可行的解决方法:

1. 本地开发时配置Maven插件参数

本地运行mvn appengine:run时,appengine-web.xml中的JVM参数配置可能不会被插件读取,需要直接在pom.xml的appengine-maven-plugin中添加jvmFlags:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>appengine-maven-plugin</artifactId>
    <version>2.4.4</version> <!-- 建议使用最新稳定版本 -->
    <configuration>
        <jvmFlags>
            <!-- 对应错误中需要打开的java.lang模块 -->
            <jvmFlag>--add-opens java.base/java.lang=ALL-UNNAMED</jvmFlag>
            <!-- 加上你提到的java.util模块 -->
            <jvmFlag>--add-opens java.base/java.util=ALL-UNNAMED</jvmFlag>
        </jvmFlags>
    </configuration>
</plugin>

修改后重新执行启动命令即可。

2. 部署到GAE标准环境时配置appengine-web.xml

如果是部署到GAE标准环境,需要确保runtime指定为java17,并在env-variables中配置JAVA_OPTS:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <runtime>java17</runtime>
    <env-variables>
        <env-var name="JAVA_OPTS" value="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED"/>
    </env-variables>
</appengine-web-app>

注意:如果之前runtime配置的是java8或java11,需要改为java17,否则JVM参数可能无法生效。

3. 直接通过命令行传递参数

如果上述配置仍不生效,可以在启动命令中直接指定JVM参数:

mvn appengine:run -Dappengine.jvmFlags="--add-opens java.base/java.lang=ALL-UNNAMED,--add-opens java.base/java.util=ALL-UNNAMED"

关键说明

你的错误提示是module java.base does not "opens java.lang" to unnamed module,所以核心需要添加--add-opens java.base/java.lang=ALL-UNNAMED,你提到的java.util参数可以一并添加,避免后续可能出现的同类问题。

内容的提问来源于stack exchange,提问作者Vova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:25:56