gpt4 book ai didi

spring - 在 Spring Boot 中抛出 NoSuchMethodError 的编译时方面

转载 作者:行者123 更新时间:2023-12-01 05:05:38 25 4
gpt4 key购买 nike

在我的 Spring Boot 1.2.2 WAR 中包含的 JAR 文件上运行来自 Maven 的“compile-time-weaver”类时出现错误。

所以,我有一个 jar,ctms-components.jar,我在使用 MAVEN 时运行我的方面(例如,方法时序分析器)。然后,Spring Boot 将其全部放入嵌入式 WAR(我使用的是 Tomcat)。我看到了 AJC Closures() 等 aspectj 编织类,并且我看到 Maven 的日志正在按照我的切入点编织我的类。

        <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>${compiler.version}</source>
<target>${compiler.version}</target>
<Xlint>ignore</Xlint>
<complianceLevel>${compiler.version}</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>false</verbose>
<aspectLibraries>
<aspectLibrary>
<groupId>cdot.ctms</groupId>
<artifactId>ctms-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<weaveDependencies>
<weaveDependency>
<groupId>cdot.ctms</groupId>
<artifactId>ctms-components</artifactId>
</weaveDependency>
</weaveDependencies>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>

这是我的 Maven 日志的摘录。
[INFO] Join point 'method-execution(cdot.base.DataAccessObject cdot.ctms.layer.services.comm.device.doppler.facade.DopplerFacade.getDopplerExchange())' in Type 'cdot.ctms.layer.services.comm.device.doppler.facade.DopplerFacade' (DopplerFacade.java:78) advised by around advice from 'cdot.aop.profiler.MethodTimerAspect' (ctms-aspects-2.0.0-SNAPSHOT.jar!MethodTimerAspect.class(from MethodTimerAspect.java))
[INFO] Join point 'method-execution(cdot.base.DataAccessObject cdot.ctms.layer.services.comm.device.doppler.facade.DopplerFacade.getDopplerRawDataExchange())' in Type 'cdot.ctms.layer.services.comm.device.doppler.facade.DopplerFacade' (DopplerFacade.java:84) advised by around advice from 'cdot.aop.profiler.MethodTimerAspect' (ctms-aspects-2.0.0-SNAPSHOT.jar!MethodTimerAspect.class(from MethodTimerAspect.java))

我的 Spring Boot WAR 显示 AJC 闭包捆绑在 WAR 中:

enter image description here

运行应用程序时出现的错误是:

java.lang.NoSuchMethodError: cdot.aop.profiler.MethodTimerAspect.aspectOf()Lcdot/aop/profiler/MethodTimerAspect
nested exception is java.lang.NoSuchMethodError: cdot.aop.profiler.MethodTimerAspect.aspectOf()Lcdot/aop/profiler/MethodTimerAspect;
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:121)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1502)
... 87 more

我不明白为什么它编译时编织,将它添加到我的 Spring Boot WAR 中就好了,还包括 ctms-aspects.jar,但在我的 Aspect 上找不到方法?

最佳答案

AspectJ 运行时库 aspectjrt.jar 必须在您的类路径中,因此它应该是 Maven <dependency>不仅适用于 AspectJ Maven 插件,也适用于 Maven 模块。

关于spring - 在 Spring Boot 中抛出 NoSuchMethodError 的编译时方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com