SIO2 problem with Spring Boot on Java 17

I am getting an error when loading my web application on Tomcat 10.1.7 using Spring Boot 3.0.4.

The error I am getting is:

Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy58.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @7d82eeb9

This seems related to Java modules, which was introduced in Java 9. Looking at the page for SIO2, it is compiled for JDK 1.8 so it would not have knowledge of those.

Note: SiO2 normally works fine on all JDK versions after 1.8 (I use it happily on Java 18 for example)… so it must be something specific to Spring.

…and I have to believe that other spring users must have work-arounds for these types of issues.

Hopefully, someone who has run into this before will offer some advice.
For now, I stopped using SIO2 in my project and the web app is loading ok.

I updated my initial post to show this is a modules problem instead of a Jakarta problem.

On JDK18, when launching Mythruna I have to add this to the command line:
–add-opens java.base/java.io=ALL-UNNAMED

…but that’s not version a compatibility issue. That’s because I use code that strict “modules” don’t normally like. I wonder if it’s related.

Edit: note that compiling SiO2 locally is as easy as “gradle install” with the source checked out/downloaded.

Try adding --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED to the command line or in gradle applicationDefaultJvmArgs.

application {
    applicationDefaultJvmArgs = [
            "--add-opens=java.base/jdk.internal.ref=ALL-UNNAMED"     
    ] 
}

–add-opens

If you have to allow code on the class path to do deep reflection to access nonpublic members, then use the --add-opens runtime option.

Some libraries do deep reflection, meaning setAccessible(true), so they can access all members, including private ones. You can grant this access using the --add-opens option on the java command line. No warning messages are generated as a result of using this option.

No luck. I still get the same error.

Hmm, not sure then. In my project, I am using Spring Boot 2.3 and SiO2 with java 19 and do not have this issue.

Have you tried –add-opens=jdk.proxy3=ALL-UNNAMED ?

Btw, the proxy module is not there on java docs, seems to be something internalized to jdk…

EDIT:
If it doesn’t work too, you may try this too:
–add-opens=jdk.proxy3/java.lang.reflect.Proxy=ALL-UNNAMED

EDIT2:

The $ dollar sign for an internalized static class and the method is m0…that is a weird access ?

I think you are missing a dash in your example.

When I add:

-–add-opens=jdk.proxy3=ALL-UNNAMED

I get this error:

Unrecognized option: -–add-opens=jdk.proxy3=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

When I add:

-–add-opens=jdk.proxy3/java.lang.reflect.Proxy=ALL-UNNAMED

I get:

Unrecognized option: -–add-opens=jdk.proxy3/java.lang.reflect.Proxy=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

I don’t know. It has to be something in the SIO2 code or its dependencies. I have not spent any time investigating it, I just stopped using SIO2 in my application.

Can you show us the full error log? It should be logged somewhere that which library tries to access jdk.proxy3 module.

I do not think this has anything to do with SiO2 (I am using it with no issue), but if you want to be sure create a simple gradle project using JME initializer and add a dependency to SiO2 (do not include spring boot dependencies) and see if the issue still happens.

By the way, are you using OpenJDK or GraalVM?

I am simply going by what I am observing with my application.
If I don’t include SIO2 in my pom.xml, the application loads and runs without a problem.

If I add this dependency:

<dependency>
   <groupId>com.simsilica</groupId>
   <artifactId>sio2</artifactId>
   <version>1.8.0</version>
</dependency>

I first get this error:

java.lang.reflect.InaccessibleObjectException: Unable to make field private static final long java.lang.reflect.Proxy.serialVersionUID accessible: module java.base does not "opens java.lang.reflect" to unnamed module @3bab7b9b

So, I added this argument to the java command line:

--add-opens=java.base/java.lang.reflect=ALL-UNNAMED

And now I get this error:

WARN: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'groovyMarkupConfigurer' defined in class path resource [org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration$GroovyMarkupConfiguration.class]: Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy74.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @2312e8a0
ERROR: Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'groovyMarkupConfigurer' defined in class path resource [org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration$GroovyMarkupConfiguration.class]: Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy74.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @2312e8a0
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:961) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917) ~[spring-context-6.0.6.jar:6.0.6]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.6.jar:6.0.6]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:174) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:154) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:96) ~[spring-boot-3.0.4.jar:3.0.4]
	at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171) ~[spring-web-6.0.6.jar:6.0.6]
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4875) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:713) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:975) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1949) ~[catalina.jar:10.1.7]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-util.jar:10.1.7]
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) ~[?:?]
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:776) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1656) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:898) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) ~[catalina.jar:10.1.7]
	at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) ~[tomcat-util.jar:10.1.7]
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) ~[?:?]
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:10.1.7]
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:913) ~[catalina.jar:10.1.7]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[catalina.jar:10.1.7]
	at org.apache.catalina.startup.Catalina.start(Catalina.java:795) ~[catalina.jar:10.1.7]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) ~[bootstrap.jar:10.1.7]
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) ~[bootstrap.jar:10.1.7]
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy74.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @2312e8a0
	at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[?:?]
	at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
	at java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) ~[?:?]
	at java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:130) ~[?:?]
	at org.codehaus.groovy.reflection.CachedClass$1$1.run(CachedClass.java:55) ~[groovy-all-2.4.5.jar:2.4.5]
	at java.security.AccessController.doPrivileged(AccessController.java:318) ~[?:?]
	at org.codehaus.groovy.reflection.CachedClass$1.initValue(CachedClass.java:50) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.reflection.CachedClass$1.initValue(CachedClass.java:48) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.reflection.CachedClass.getFields(CachedClass.java:264) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.lang.MetaClassImpl.addFields(MetaClassImpl.java:2377) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.lang.MetaClassImpl.inheritFields(MetaClassImpl.java:2372) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.lang.MetaClassImpl.setupProperties(MetaClassImpl.java:2259) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3302) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3266) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:873) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findASTTranformationClass(ASTTransformationCustomizer.groovy:204) ~[groovy-all-2.4.5.jar:2.4.5]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findPhase(ASTTransformationCustomizer.groovy:226) ~[groovy-all-2.4.5.jar:2.4.5]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
	at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.<init>(ASTTransformationCustomizer.groovy:180) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.<init>(ASTTransformationCustomizer.groovy:188) ~[groovy-all-2.4.5.jar:2.4.5]
	at groovy.text.markup.MarkupTemplateEngine.<init>(MarkupTemplateEngine.java:94) ~[groovy-all-2.4.5.jar:2.4.5]
	at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.createTemplateEngine(GroovyMarkupConfigurer.java:160) ~[spring-webmvc-6.0.6.jar:6.0.6]
	at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.afterPropertiesSet(GroovyMarkupConfigurer.java:153) ~[spring-webmvc-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808) ~[spring-beans-6.0.6.jar:6.0.6]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-6.0.6.jar:6.0.6]
	... 57 more
12-Mar-2023 10:38:04.589 SEVERE [main] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [/usr/local/tomcat/webapps/www.war]
	java.lang.IllegalStateException: Error starting child
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:686)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:713)
		at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:975)
		at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1949)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
		at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:776)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1656)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:898)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:913)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:795)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:568)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
	Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/www]]
		at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
		... 37 more
	Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'groovyMarkupConfigurer' defined in class path resource [org/springframework/boot/autoconfigure/groovy/template/GroovyTemplateAutoConfiguration$GroovyMarkupConfiguration.class]: Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy74.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @2312e8a0
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1762)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
		at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
		at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
		at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
		at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
		at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:961)
		at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)
		at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
		at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
		at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
		at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
		at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:174)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:154)
		at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:96)
		at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:171)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4875)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		... 38 more
	Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private static final java.lang.reflect.Method jdk.proxy3.$Proxy74.m0 accessible: module jdk.proxy3 does not "opens jdk.proxy3" to unnamed module @2312e8a0
		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.Field.checkCanSetAccessible(Field.java:178)
		at java.base/java.lang.reflect.AccessibleObject.setAccessible(AccessibleObject.java:130)
		at org.codehaus.groovy.reflection.CachedClass$1$1.run(CachedClass.java:55)
		at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
		at org.codehaus.groovy.reflection.CachedClass$1.initValue(CachedClass.java:50)
		at org.codehaus.groovy.reflection.CachedClass$1.initValue(CachedClass.java:48)
		at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49)
		at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36)
		at org.codehaus.groovy.reflection.CachedClass.getFields(CachedClass.java:264)
		at groovy.lang.MetaClassImpl.addFields(MetaClassImpl.java:2377)
		at groovy.lang.MetaClassImpl.inheritFields(MetaClassImpl.java:2372)
		at groovy.lang.MetaClassImpl.setupProperties(MetaClassImpl.java:2259)
		at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3302)
		at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3266)
		at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254)
		at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285)
		at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295)
		at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261)
		at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:873)
		at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125)
		at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
		at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)
		at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findASTTranformationClass(ASTTransformationCustomizer.groovy:204)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:568)
		at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
		at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151)
		at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102)
		at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214)
		at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.findPhase(ASTTransformationCustomizer.groovy:226)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:568)
		at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
		at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite$StaticMetaMethodSiteNoUnwrapNoCoerce.invoke(StaticMetaMethodSite.java:151)
		at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.callStatic(StaticMetaMethodSite.java:102)
		at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194)
		at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214)
		at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.<init>(ASTTransformationCustomizer.groovy:180)
		at org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.<init>(ASTTransformationCustomizer.groovy:188)
		at groovy.text.markup.MarkupTemplateEngine.<init>(MarkupTemplateEngine.java:94)
		at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.createTemplateEngine(GroovyMarkupConfigurer.java:160)
		at org.springframework.web.servlet.view.groovy.GroovyMarkupConfigurer.afterPropertiesSet(GroovyMarkupConfigurer.java:153)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1808)
		at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1758)
		... 57 more

This is repeatable. I can remove the dependency and my app works. When I add the dependency, the app fails.

Yes, I installed it using dnf on AlmaLinux 9.1
When I do java -version, I get:

openjdk version "17.0.6" 2023-01-17 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.6.0.10-3.el9_1) (build 17.0.6+10-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.6.0.10-3.el9_1) (build 17.0.6+10-LTS, mixed mode, sharing)

Seems similar:

I think this issue comes up with Spring because it tries to go out and scan all of the jars looking for autowiring cases or something. But this could have to do with your application or component setup… that may be why others aren’t hitting the same issue.

The jdk.proxy3.$Proxy58.m0 is a virtually generated dynamic method from a generated dynamic class from ProxyGeneratory.java, so it may be dependent upon the jdk version or release or vendor, check if your spring version supports jdk-17 and your version release notes.

I don’t know the use of Proxy and Proxy generator in java, but reflective access specific to a jdk is a very bad idea, may be there is a deep sort of delegation that takes path dynamically to this class based on the currently installed jdk…

As a guess, it could be something like Spring trying to autowire the groovy classes because they are a dependency… and then finding one of Groovy’s runtime-generated Proxy instances and trying to introspect that.

Normally, when setting up a spring boot application, the creator will specify which packages should be checked for autowiring… and I wonder if that’s set too broad in this case.

SiO2 isn’t doing any JDK-specific reflection (it barely does any reflection at all, if any). Of course groovy does… and that’s a dependency of both SiO2 and Lemur (which is a dependency of SiO2)… but normally spring boot should ignore it.

I am also suspect of groovy, maybe somehow the old groovy-all gets in the way of spring.

In my case, the spring boot project is in a different subproject with no JME-related libs there. Probably that is why I am not encountering the issue.

Though I guess it would be easy to test, OP can exclude groovy-all from coming with SiO2 and see if it makes any difference.

    implementation ("com.simsilica:sio2:$sio2Version") {
        exclude module: 'groovy-all'
    }

I used the online initializer at this url https://start.spring.io/
It did not give me a way to set up a list of packages for autowiring, so I guess it is trying to scan all of them.
I will see if I can find a way to configure the packages it searches.

I am using Maven to manage my project, but I think I can figure out how to add that exclusion to my pom.xml.

I am going to be out of town for a while so it will be a bit before I can test it.

I change the dependency in my pom.xml file to:

		<dependency>
		  <groupId>com.simsilica</groupId>
		  <artifactId>sio2</artifactId>
		  <version>1.8.0</version>
		  <exclusions>
		    <exclusion>
		      <groupId>org.codehaus.groovy</groupId>
		      <artifactId>groovy-all</artifactId>
		    </exclusion>
		  </exclusions>
		</dependency>

And the app loads without an error.
Thanks for the help!