spring-native
spring-native copied to clipboard
Possible issues with multi-module + web + spring security
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:
- 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
- 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 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?
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
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.
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:
- Presentation Layer
- Application Layer
- Business Layer
- 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 Could you please check your project is working on native in a single module fashion?
@sdeleuze I can confirm that my project works as long as the controller resides in the same module as my Application
class.
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.
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.