spring-native icon indicating copy to clipboard operation
spring-native copied to clipboard

Possible issues with multi-module + web + spring security

Open mzhafez opened this issue 2 years ago • 7 comments

I have an issue with my project which is a multi-module + web + spring security project. I've tried converting this project to be a spring native and I've somewhat been successful except my @PreAuthorize isn't picking up my @PathVariable properly. After some digging around, it looks like inspectClass method in LocalVariableTableParameterNameDiscoverer.java (from spring-core) isn't able to find my controller. I normally see this in the logs:

2022-03-02T06:03:15.225370827Z 2022-03-02 06:03:15.225 DEBUG 1 --- [nio-8080-exec-1] ocalVariableTableParameterNameDiscoverer : Cannot find '.class' file for class [class com.pason.plans.presentation.controller.das.roadmap.v1.DasRoadMapController] - unable to determine constructor/method parameter names

I'm trying to replicate a weird issue with a multi module project. I am using the sample multi module project (but further modifying it by adding spring boot web starter + spring boot security starter to be closer with what I have). And I'm running into some issues before I can even replicate my own issue:

  1. For gradle. I'm getting this error when I try to build it:

FAILURE: Build failed with an exception.

* Where:
Build file '/home/mort/mort_dev/research/spring-native-fork-mzhafez/samples/multi-modules/build.gradle' line: 12

* What went wrong:
A problem occurred evaluating root project 'multi-modules'.
> Failed to apply plugin class 'org.gradle.api.plugins.JavaPlugin'.
   > Configuration with name 'developmentOnly' not found.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
  1. For maven: I'm able to build it but I get a stackoverflowerror:
022-03-02T08:12:25.527137303Z 2022-03-02 08:12:25.525 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause
2022-03-02T08:12:25.527139033Z 
2022-03-02T08:12:25.527140273Z java.lang.StackOverflowError: null
2022-03-02T08:12:25.527141583Z 	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError0(StackOverflowCheckImpl.java:293) ~[na:na]
2022-03-02T08:12:25.527143023Z 	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.newStackOverflowError(StackOverflowCheckImpl.java:289) ~[na:na]
2022-03-02T08:12:25.527144413Z 	at com.oracle.svm.core.graal.snippets.StackOverflowCheckImpl.throwNewStackOverflowError(StackOverflowCheckImpl.java:269) ~[na:na]
2022-03-02T08:12:25.527145863Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:71) ~[na:na]
2022-03-02T08:12:25.527147283Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527148723Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527150103Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527151503Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527154343Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527155743Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527157313Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527158803Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527160193Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527161583Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527163033Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527164393Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527165793Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527167243Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527168623Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527170033Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527171473Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527172843Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527174223Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527175663Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527177023Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527178413Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527180043Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527181443Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527184693Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527186163Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527187533Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527188943Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527190373Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527191753Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527193173Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527194633Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527196043Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527197473Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527198903Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527200283Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527201693Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527203213Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]
2022-03-02T08:12:25.527204753Z 	at org.springframework.aop.framework.Interceptors$DynamicAdvisedInterceptor.intercept(Interceptors.java:120) ~[na:na]
2022-03-02T08:12:25.527206153Z 	at com.example.multimodules.core.DemoController$$SpringProxy$a3954b9f.toString(Unknown Source) ~[com.example.multimodules.MultiModulesApplication:0.0.1-SNAPSHOT]
2022-03-02T08:12:25.527207573Z 	at java.lang.String.valueOf(String.java:2951) ~[com.example.multimodules.MultiModulesApplication:na]

Code available at https://github.com/mzhafez/spring-native Code change demonstrating the issue (using maven) available at https://github.com/mzhafez/spring-native/pull/1

I'm assuming I don't have something setup properly but I can't tell what. Can someone give me some pointers please?

Thanks

mzhafez avatar Mar 02 '22 08:03 mzhafez

@mzhafez For Maven with your commit cherry-picked on top on main I can't reproduce. Could you try again rebased on top of main after doing a mvn install or build.sh at the root?

For Gradle, I can indeed reproduce the Configuration with name 'developmentOnly' not found. error even without your PR when running ./gradlew :app:bootBuildImage in samples/multi-module. @bclozel Could you please take care of this one since that seems Spring Boot Gradle specific?

sdeleuze avatar Mar 07 '22 16:03 sdeleuze

I've sync'd my fork with whats on spring native's main & merged main into my branch. I'm now seeing a different issue (getting a 401 now):


2022-03-08T02:49:44.912461981Z org.springframework.security.access.AccessDeniedException: Access is denied
2022-03-08T02:49:44.912463751Z 	at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:73) ~[na:na]
2022-03-08T02:49:44.912465521Z 	at org.springframework.security.access.intercept.AbstractSecurityInterceptor.attemptAuthorization(AbstractSecurityInterceptor.java:239) ~[na:na]
2022-03-08T02:49:44.912467281Z 	at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:208) ~[na:na]
2022-03-08T02:49:44.912469021Z 	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:113) ~[na:na]
2022-03-08T02:49:44.912470691Z 	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[na:na]
2022-03-08T02:49:44.912472321Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912473931Z 	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[na:na]
2022-03-08T02:49:44.912475631Z 	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[na:na]
2022-03-08T02:49:44.912477371Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912479011Z 	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[na:na]
2022-03-08T02:49:44.912480571Z 	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[na:na]
2022-03-08T02:49:44.912482171Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912484081Z 	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[na:na]
2022-03-08T02:49:44.912485761Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912490631Z 	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[na:na]
2022-03-08T02:49:44.912492351Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912493931Z 	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[na:na]
2022-03-08T02:49:44.912495511Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912497131Z 	at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:150) ~[na:na]
2022-03-08T02:49:44.912498881Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912500551Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912502141Z 	at org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter.doFilterInternal(DefaultLogoutPageGeneratingFilter.java:58) ~[na:na]
2022-03-08T02:49:44.912503781Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912505371Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912506981Z 	at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:237) ~[na:na]
2022-03-08T02:49:44.912508741Z 	at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:223) ~[na:na]
2022-03-08T02:49:44.912510371Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912511951Z 	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:219) ~[na:na]
2022-03-08T02:49:44.912513771Z 	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:213) ~[na:na]
2022-03-08T02:49:44.912515451Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912517031Z 	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[na:na]
2022-03-08T02:49:44.912518781Z 	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[na:na]
2022-03-08T02:49:44.912520451Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912522041Z 	at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912525461Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912527041Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912528621Z 	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[na:na]
2022-03-08T02:49:44.912530201Z 	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[na:na]
2022-03-08T02:49:44.912531771Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912533331Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912534951Z 	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[na:na]
2022-03-08T02:49:44.912538111Z 	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[na:na]
2022-03-08T02:49:44.912541691Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912545291Z 	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[na:na]
2022-03-08T02:49:44.912548741Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912552921Z 	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[na:na]
2022-03-08T02:49:44.912556511Z 	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[na:na]
2022-03-08T02:49:44.912559491Z 	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[na:na]
2022-03-08T02:49:44.912562641Z 	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[na:na]
2022-03-08T02:49:44.912566031Z 	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[na:na]
2022-03-08T02:49:44.912569311Z 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[na:na]
2022-03-08T02:49:44.912572921Z 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[na:na]
2022-03-08T02:49:44.912576321Z 	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[na:na]
2022-03-08T02:49:44.912579551Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912582861Z 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[na:na]
2022-03-08T02:49:44.912589271Z 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[na:na]
2022-03-08T02:49:44.912592801Z 	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[na:na]
2022-03-08T02:49:44.912596081Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912598991Z 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[na:na]
2022-03-08T02:49:44.912601911Z 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[na:na]
2022-03-08T02:49:44.912605581Z 	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[na:na]
2022-03-08T02:49:44.912608851Z 	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[na:na]
2022-03-08T02:49:44.912612171Z 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[na:na]
2022-03-08T02:49:44.912615581Z 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[na:na]
2022-03-08T02:49:44.912619211Z 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[na:na]
2022-03-08T02:49:44.912622361Z 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[na:na]
2022-03-08T02:49:44.912625781Z 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[na:na]
2022-03-08T02:49:44.912629071Z 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[na:na]
2022-03-08T02:49:44.912632501Z 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[com.example.multimodules.MultiModulesApplication:9.0.58]
2022-03-08T02:49:44.912635901Z 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[na:na]
2022-03-08T02:49:44.912639351Z 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359) ~[na:na]
2022-03-08T02:49:44.912642631Z 	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[na:na]
2022-03-08T02:49:44.912646031Z 	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[na:na]
2022-03-08T02:49:44.912649031Z 	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) ~[na:na]
2022-03-08T02:49:44.912652261Z 	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735) ~[na:na]
2022-03-08T02:49:44.912655451Z 	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[na:na]
2022-03-08T02:49:44.912658781Z 	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[na:na]
2022-03-08T02:49:44.912662001Z 	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[na:na]
2022-03-08T02:49:44.912668731Z 	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[na:na]
2022-03-08T02:49:44.912672081Z 	at java.lang.Thread.run(Thread.java:829) ~[na:na]
2022-03-08T02:49:44.912675291Z 	at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:597) ~[na:na]
2022-03-08T02:49:44.912678521Z 	at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:194) ~[na:na]

Just to clarify: I am generating the native image by running ./mvnw clean package -PbuildImage and I'm running the said image by using the docker-compose file in my PR.

One last note: My normal non-native build is still working

Best regards

mzhafez avatar Mar 08 '22 03:03 mzhafez

I've just fixed the Gradle side of things in 0b2384f - the AOT plugin should not be applied on the main module, as it's only meant to be applied along the Spring Boot plugin. Currently we're conditionally applying it with the JavaPlugin and part of this relies on a SpringBoot plugin configuration being present. We should revisit this arrangement, but I'm afraid that the dependencies between AOT/Spring Boot/Java Gradle plugins could be hard to properly express, as this plugin fits somehow in-between.

I've checked that changing that in the spring-native fork, as well as adding the missing dependencies in the core module, fixes the build failure.

As a side note, adding starters to the core module looks to me as an anti-pattern; starters should only be applied on the Spring Boot application module itself, other modules should selectively depend on required dependencies only. I suspect that this arrangement might be artificial here, as web controllers and other pieces should really be in the application module.

bclozel avatar Mar 18 '22 10:03 bclozel

Thanks @bclozel I can confirm that I'm able to build it now and I have replicated the original issue that I was trying to replicate.

It looks like targetId is null in my PermEval.

Regarding your other comment: That's correct. I'm trying to emulate half of my layered architecture where I've got:

  1. Presentation Layer
  2. Application Layer
  3. Business Layer
  4. Persistence Layer

In this particular scenario, I'm using the "core" module as the "presentation" module and generally speaking. Hopefully this doesn't sound like anti-pattern anymore.

mzhafez avatar Mar 21 '22 14:03 mzhafez

@mzhafez Could you please check your project is working on native in a single module fashion?

sdeleuze avatar Mar 28 '22 08:03 sdeleuze

@sdeleuze I can confirm that my project works as long as the controller resides in the same module as my Application class.

mzhafez avatar Mar 28 '22 15:03 mzhafez

I made various changes and tries locally, they seems to show that module dependency like api project(':core') are not taken in account during native builds, if I use implementation 'com.example:core:0.0.2-SNAPSHOT' instead that works. Not sure yet if the issue is at NBT or Spring AOT level.

sdeleuze avatar May 11 '22 16:05 sdeleuze

Spring Native is now superseded by Spring Boot 3 official native support, see the related reference documentation for more details.

As a consequence, I am closing this issue, and recommend trying your use case with latest Spring Boot 3 version. If you still experience the issue reported here, please open an issue directly on the related Spring project (Spring Framework, Data, Security, Boot, Cloud, etc.) with a reproducer.

Thanks for your contribution on the experimental Spring Native project, we hope you will enjoy the official native support introduced by Spring Boot 3.

sdeleuze avatar Jan 02 '23 11:01 sdeleuze