【问题标题】:Compile-time aspects throwing NoSuchMethodError in Spring Boot在 Spring Boot 中抛出 NoSuchMethodError 的编译时方面
【发布时间】:2015-03-17 03:23:02
【问题描述】:

在我的 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 中:

我在运行应用程序时遇到的错误是:

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 上找不到方法?

【问题讨论】:

    标签: spring spring-boot aspectj aspectj-maven-plugin


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 2022-12-17
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      相关资源
      最近更新 更多