When I start my Google App Engine app based on Java 17 via Maven I get the next error:
[INFO] GCLOUD: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @546ccad7
[INFO] GCLOUD: at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
To fix it I need to add --add-opens java.base/java.util=ALL-UNNAMED
.
According to the official docs, it might be done in the appengine-web.xml file:
<env-variables>
<env-var name="JAVA_USER_OPTS" value="--add-opens java.base/java.util=ALL-UNNAMED" />
</env-variables>
However, it does not work!
I tried also
<env-variables>
<env-var name="JAVA_OPTS" value="--add-opens java.base/java.util=ALL-UNNAMED" />
</env-variables>
Nothing.
Does any body know how to solve the issue?
Thanks in advance!
Solved via adding the next args
<jvmFlag>--add-opens</jvmFlag>
<jvmFlag>java.base/java.lang=ALL-UNNAMED</jvmFlag>
<jvmFlag>--add-opens</jvmFlag>
<jvmFlag>java.base/java.util=ALL-UNNAMED</jvmFlag>
into appengine-maven-plugin <devserver.jvmFlags>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.8.1</version>
<configuration>
<devserver.host>127.0.0.1</devserver.host>
<devserver.port>8889</devserver.port>
<devserver.jvmFlags>
<jvmFlag>--add-opens</jvmFlag>
<jvmFlag>java.base/java.lang=ALL-UNNAMED</jvmFlag>
<jvmFlag>--add-opens</jvmFlag>
<jvmFlag>java.base/java.util=ALL-UNNAMED</jvmFlag>
</devserver.jvmFlags>
</configuration>
</plugin>