Spring boot: 3.3.2 (latest) GraalVM: 22.0.2+9.1 native-image: 22.0.2 2024-07-16

Spring boot native application generated by start.spring.io with tomcat exclusion and jetty starter addition, built with mvn -P native clean native:compile or with mvn -P native clean spring-boot:build-image fails with exception:

Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:165)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:619)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
    at com.example.demo.DemoApplication.main(DemoApplication.java:10)
    at java.base@22.0.2/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jettyServletWebServerFactory': java.lang.NoSuchMethodException: org.eclipse.jetty.util.ClassMatcher$ByPackageOrName.<init>()
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:607)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:223)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:186)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:162)
    ... 9 more
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: org.eclipse.jetty.util.ClassMatcher$ByPackageOrName.<init>()
    at org.eclipse.jetty.util.IncludeExcludeSet.<init>(IncludeExcludeSet.java:106)
    at org.eclipse.jetty.util.ClassMatcher.<init>(ClassMatcher.java:494)
    at org.eclipse.jetty.util.ClassMatcher.<init>(ClassMatcher.java:500)
    at org.eclipse.jetty.util.ClassMatcher.<init>(ClassMatcher.java:505)
    at org.eclipse.jetty.ee10.webapp.AbstractConfiguration$Builder.<init>(AbstractConfiguration.java:37)
    at org.springframework.boot.autoconfigure.websocket.servlet.JettyWebSocketServletWebServerCustomizer.customize(JettyWebSocketServletWebServerCustomizer.java:44)
    at org.springframework.boot.autoconfigure.websocket.servlet.JettyWebSocketServletWebServerCustomizer.customize(JettyWebSocketServletWebServerCustomizer.java:39)
    at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.lambda$postProcessBeforeInitialization$0(WebServerFactoryCustomizerBeanPostProcessor.java:72)
    at org.springframework.boot.util.LambdaSafe$Callbacks.lambda$invoke$0(LambdaSafe.java:287)
    at org.springframework.boot.util.LambdaSafe$LambdaSafeCallback.invoke(LambdaSafe.java:159)
    at org.springframework.boot.util.LambdaSafe$Callbacks.lambda$invoke$1(LambdaSafe.java:286)
    at java.base@22.0.2/java.util.ArrayList.forEach(ArrayList.java:1597)
    at java.base@22.0.2/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1117)
    at org.springframework.boot.util.LambdaSafe$Callbacks.invoke(LambdaSafe.java:286)
    at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:72)
    at org.springframework.boot.web.server.WebServerFactoryCustomizerBeanPostProcessor.postProcessBeforeInitialization(WebServerFactoryCustomizerBeanPostProcessor.java:58)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1798)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
    ... 17 more
Caused by: java.lang.NoSuchMethodException: org.eclipse.jetty.util.ClassMatcher$ByPackageOrName.<init>()
    at java.base@22.0.2/java.lang.Class.checkExecutable(DynamicHub.java:1101)
    at java.base@22.0.2/java.lang.Class.checkConstructor(DynamicHub.java:1082)
    at java.base@22.0.2/java.lang.Class.getConstructor0(DynamicHub.java:1272)
    at java.base@22.0.2/java.lang.Class.getDeclaredConstructor(DynamicHub.java:2955)
    at org.eclipse.jetty.util.IncludeExcludeSet.<init>(IncludeExcludeSet.java:79)
    ... 35 more

Example: demo.zip

Analog for #40271 but now org.eclipse.jetty.util.ClassMatcher$ByPackageOrName instead of org.eclipse.jetty.ee10.webapp.ClassMatcher$ByPackageOrName.

Comment From: wilkinsona

Duplicates https://github.com/oracle/graalvm-reachability-metadata/pull/495. Until a new version of the reachability metadata is released, you can override it.