Java - Handling error "accessible: module <module name> does not "opens java.lang" to unnamed module"

Problem

JVM return an error like

Caused by: 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 @1d7acb34

Cause

The issue at hand is caused by newer versions of Java restricting access to certain libraries. We can see that issues are occurring as SeaLights added support to Java 17.

Solution

Adding the option --add-opens java.base/java.lang=ALL-UNNAMED to the Maven Surefire plugin and Maven Failsafe plugin configuration prevents exceptions like that.

Example for the Maven Surefire plugin

"surefireArgLine": "-Xms1280m -Xmx1280m @{sealightsArgLine} ${surefireArgLine} --add-opens java.base/java.lang=ALL-UNNAMED"

Example for the Maven Failsafe plugin

"failsafeArgLine": "-Xmx8192m @{sealightsArgLine} -Dsl.testStage=\"Integration Tests\" --add-opens java.base/java.lang=ALL-UNNAMED"