Аспекты времени компиляции, вызывающие NoSuchMethodError в Spring Boot

Я получаю сообщение об ошибке при запуске моих классов «компиляция-время-ткачества» из Maven в файле JAR, который включен в мой Spring Boot 1.2.2 WAR.

Итак, у меня есть jar, ctms-components.jar, в котором я запускаю свой аспект (например, профилировщик времени метода) с использованием MAVEN. Затем Spring Boot помещает все это во встроенную WAR (я использую Tomcat). Я вижу оба связанных класса, таких как AJC Closures () и т. Д., И я вижу, что журналы от 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))

My 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?


person Jason    schedule 17.03.2015    source источник


Ответы (1)


Библиотека времени выполнения AspectJ aspectjrt.jar должна находиться в вашем пути к классам, поэтому она должна быть Maven <dependency> не только для подключаемого модуля AspectJ Maven, но и для модуля Maven как такового.

person kriegaex    schedule 05.04.2015