Spring + AspectJ плетение для java 8 с использованием aspectj-maven-plugin

Я переношу свой проект с java 7 на java 8, и проблема, которую я имею, связана с сплетением аспект с использованием aspectj-maven-plugin.

Я мог бы успешно сконфигурировать плетение с помощью этого плагина, работающего на Java 6 и 7, в соответствии с документацией Haus. Но проблема в том, что я не нашел способа использовать (и найти) плагин версии 7, который поддерживает java 8. Я видел здесь, что плагин 7 добавляет поддержку java 8, но не может найти способ ее использования.

Это плагин конфигурации, в котором я нуждаюсь:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7</version> <!-- AspectJ weaver plugin 7 is for java 8 (version 1.6 is for java 7) -->
          <configuration>
              <complianceLevel>1.8</complianceLevel>
              <source>1.8</source>
              <target>1.8</target>
          </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Я подтвердил, что приведенный выше код с использованием версии 1.6 отлично подходит для Java 7, но не повезло использовать версию 1.7.

Вы знаете, как запустить weaver для spring + aspectj, работающего на Java 8?

Ответы

Ответ 1

Решение до официального выпуска до сентября 2015 г.

После многих головных болей и многих часов борьбы с этим, к счастью, я мог решить эту проблему. Вот что я сделал:

Чтобы использовать aspectj-maven-plugin с Java 8, я мог бы настроить версию aspectj-maven-plugin 1.7 (обратите внимание, что aspectj-maven-plugin 1.6 работает для Java 7).

Итак, конфигурация плагина maven должна быть:

<!-- AspectJ configuration -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7-SNAPSHOT</version>
    <configuration>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Кстати, нужны аксессуарные jars:

<!-- Spring AOP + AspectJ -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.1</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>4.0.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.8.1</version>
</dependency>

Самое главное, с чем я боролся, это то, что для установки флекса aspectj-maven-plugin 1.7 я должен был сделать это вручную, так как эти файлы jar/pom еще не находятся на maven repo.

Обновление: Итак, файл jar можно скачать из Haus Jira (см. раздел "Вложение" ). Если Haus больше не доступен, вы можете загрузить его из моего github:

https://github.com/fedepia/aspectj-maven-plugin-1.7

После загрузки и копирования его на локальное репо мне нужно было создать свой собственный aspectj-maven-plugin-1.7-SNAPSHOT.pom файл в каталоге:

.m2\repository\org\codehaus\mojo\aspectj-maven-plugin\1.7-SNAPSHOT\aspectj-maven-plugin-1.7-SNAPSHOT.pom

Я основывался на копии с версии 1.6, но должен был изменить следующий контент:

<version>1.7-SNAPSHOT</version>

<properties>
    <aspectjVersion>1.8.1</aspectjVersion>
    <mavenVersion>2.2.1</mavenVersion>
    <changesPluginVersion>2.9</changesPluginVersion>
</properties>

Что вы здесь все, надеюсь помочь.

Обновление: (добавление более подробной информации в комментарии Xtreme Biker в комментариях)

В моей конфигурации конфигурации у меня есть:

<aop:aspectj-autoproxy /> 

<bean id="notificationAspect" class="com.integration.core.aspect.NotificationAspect" factory-method="aspectOf" scope="singleton"></bean>

Для моего аспекта java я использую:

@Aspect
public class NotificationAspect
{
   ...
   @AfterThrowing(pointcut="@annotation(com.integration.core.meta.NotifyOnFailure)", throwing="ex")
   public void executeOnException(JoinPoint joinPoint, ExternalApiExecutionException ex) throws Throwable
    {
    ...



Наконец официальный плагин выпущен с сентября 2015 года

Это обновление для ответа с официальным выпуском плагина. Чтобы использовать Java 8 с AspectJ, официальный плагин aspectj maven можно найти по этой ссылке:

http://www.mojohaus.org/aspectj-maven-plugin/usage.html

Вот ссылка на репозиторий maven:

http://mvnrepository.com/artifact/org.codehaus.mojo/aspectj-maven-plugin/1.8

Как указано в документации, код для его использования:

<project>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.7</version>
    </dependency>
    ...
  </dependencies>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>aspectj-maven-plugin</artifactId>
        <version>1.8</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>       <!-- use this goal to weave all your main classes -->
              <goal>test-compile</goal>  <!-- use this goal to weave all your test classes -->
            </goals>
          </execution>
        </executions>
      </plugin>
      ...
    </plugins>
  <build>
  ...
</project>