Using Spring Boot 2.4.4 with AspectJ 1.9.6 runtime weaving.
During triggered devtools restart, I get a bunch of errors like:
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.defineClass(ClassLoaderWeavingAdaptor.java:1103)
at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.access$300(ClassLoaderWeavingAdaptor.java:66)
at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor$SimpleGeneratedClassHandler.acceptClass(ClassLoaderWeavingAdaptor.java:150)
at org.aspectj.weaver.tools.WeavingAdaptor$WeavingClassFileProvider$1.acceptResult(WeavingAdaptor.java:920)
at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1434)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1195)
at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:551)
at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:387)
at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:116)
at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:51)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
Caused by: java.lang.LinkageError: loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @59d5bbc4 attempted duplicate class definition for pse.shop.ProductService$AjcClosure3. (pse.shop.ProductService$AjcClosure3 is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader @59d5bbc4, parent loader 'app')
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:710)
... 16 more
Is AspectJ runtime weaving supported by devtools restart?
Comment From: wilkinsona
No, I don't think it is. We don't have any tests for it and I suspect that it hasn't been tried before. If it worked, it would only be by accident. We'll have to discuss this as a team and see if it's something that we want to spend time trying to support. My first impression is that it's not a Spring Boot problem anyway. There is one restart class loader per restart. If AspectJ's instrumentation is instructing a restart class loader to define the same class multiple times, I don't think that's something that Spring Boot can control.
Comment From: philwebb
We spoke about this today as a team and decided that we haven't got the bandwidth to support AspectJ and Devtools. If you can identify a change that fixes the problem, we'd be happy to consider merging it.