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

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

Я мог бы успешно настроить переплетение с помощью этого плагина, работающего на Java 6 и 7, в соответствии с Документация по дому. Но проблема в том, что я не нашел способа использовать (и найти) плагин версии 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?


person Federico Piazza    schedule 08.08.2014    source источник
comment
Описание какое-то непонятное. Что именно не работает? Видите ли вы какие-либо сообщения об ошибках в консоли? Если это так, пожалуйста, опубликуйте их.   -  person kriegaex    schedule 10.08.2014
comment
@kriegaex спасибо за вопрос. Я мог решить проблему, которая была действительно сложной. Я разместил ответ, возможно, может помочь кому-то еще.   -  person Federico Piazza    schedule 13.08.2014
comment
Две ссылки в вопросе также не работают. Поскольку у вас есть большая часть данных на github, было бы неплохо их исправить. :)   -  person Victor Stafusa    schedule 13.06.2015
comment
@VictorStafusa, мой друг, за комментарий. К сожалению, CodeHaus еще не перенесла документацию по плагинам для аспектов. Я буду продолжать проверять это, чтобы обновить его. Спасибо, что подняли этот вопрос.   -  person Federico Piazza    schedule 13.06.2015


Ответы (1)


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

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

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

Итак, конфигурация плагина 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>

Кстати, нужные jar-файлы аспекта J:

<!-- 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>

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

Обновление: Итак, 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, по этой ссылке можно найти официальный подключаемый модуль 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>
person Federico Piazza    schedule 11.08.2014
comment
+1, сэкономил мне время. Однако у вас есть опечатка в вашей весенней версии. - person drew moore; 16.09.2014
comment
Спасибо @drewmoore за +1. Кстати, не могли бы вы указать мне, что за опечатка? - person Federico Piazza; 16.09.2014
comment
Я не думаю, что существовала версия spring-aop 1.8.1, и если бы она была, сегодня она явно устарела бы... (текущая версия 4.1.0) - person drew moore; 16.09.2014
comment
@drewmoore отлично! Да, вы совершенно правы. Я исправлю это сейчас - person Federico Piazza; 17.09.2014
comment
Не могли бы вы дать более подробную информацию о конфигурации контекста вашего приложения? А как вы настроили свой @Aspect? Большое спасибо! - person Xtreme Biker; 17.02.2015
comment
Еще раз спасибо, так полезно! - person Xtreme Biker; 17.02.2015
comment
@XtremeBiker, спасибо! Если вы найдете это полезным, не стесняйтесь голосовать :) - person Federico Piazza; 17.02.2015
comment
@Fede Поскольку codehaus закрыт, ссылка на MASPECTJ-131 больше не работает. Я пытаюсь найти новую ссылку на проблему, но пока безуспешно. - person Victor Stafusa; 13.06.2015
comment
@VictorStafusa приятно наверстать упущенное. У меня есть файлы, я загружаю их на github :). Спасибо за это. - person Federico Piazza; 13.06.2015
comment
@nterry рад помочь, это было безумно раздражает, чтобы понять это, так рад слышать, что это помогает - person Federico Piazza; 06.11.2015
comment
pastebin.com/ejytis3G Я получаю сообщение об ошибке выполнения рабочего процесса для простого рабочего процесса с использованием асинхронного метода (пример и сообщение об ошибке в пастбине). Любая помощь приветствуется. - person Kumar Deepak; 09.05.2016
comment
Если вы пришли сюда с той же проблемой @KumarDeepak, то проверьте этот репозиторий для вашего спасения. github.com/pedropaulovc/aws-flow-maven-eclipse-samples - person joezen777; 03.05.2017