web-dev-qa-db-fra.com

Tissage Spring + AspectJ pour Java 8 utilisant le plugin aspectj-maven

Je migre mon projet de Java 7 vers Java 8 et le problème que j'ai) est lié au tissage aspectj utilisant aspectj-maven-plugin.

J'ai pu configurer avec succès le tissage en utilisant ce plugin fonctionnant sur Java 6 et 7 selon documentation Haus . Mais le problème est que je n'ai trouvé aucun moyen d'utiliser (et trouver) la version 7 du plugin qui prend en charge Java 8. J'ai vu ici que le plugin 7 ajoute Java 8 support mais ne pouvait pas) t trouver un moyen de l'utiliser.

Voici le plugin de configuration dont j'ai besoin:

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

J'ai confirmé que le code ci-dessus utilisant la version 1.6 fonctionne bien pour Java 7, mais je n'ai pas eu de chance d'essayer d'utiliser la version 1.7.

Savez-vous comment exécuter le tisserand pour le printemps + aspectj fonctionnant sur Java 8?

17
Federico Piazza

Solution avant la sortie officielle avant septembre 2015

Après de nombreux maux de tête et de nombreuses heures à lutter contre cela, heureusement j'ai pu résoudre ce problème. Voici ce que j'ai fait:

Utiliser aspectj-maven-plugin avec Java 8 J'ai pu configurer la version aspectj-maven-plugin 1.7 (Notez que aspectj-maven-plugin 1.6 fonctionne pour Java 7).

Ainsi, la configuration du plugin maven doit être:

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

Soit dit en passant, les pots aspectJ nécessaires sont:

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

La chose la plus importante que j'ai rencontrée est que pour installer le pot aspectj-maven-plugin 1.7, je devais le faire manuellement car ces fichiers jar/pom ne sont pas encore sur maven repo.

Mise à jour: Ainsi, le fichier jar peut être téléchargé à partir du lien Haus Jira (regardez la section des pièces jointes). Si Haus n'est plus disponible, vous pouvez le télécharger depuis mon github:

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

Après l'avoir téléchargé et copié dans mon référentiel local, je devais créer mon propre aspectj-maven-plugin-1.7-SNAPSHOT.pom fichier dans le répertoire:

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

Je me suis basé sur une copie de la version 1.6 mais j'ai dû modifier le contenu suivant:

<version>1.7-SNAPSHOT</version>

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

C'est tout ici que vous allez, j'espère vous aider.

Mise à jour: (ajout de plus de détails comme Xtreme Biker l'a demandé dans les commentaires)

Dans ma configuration de contexte, j'ai:

<aop:aspectj-autoproxy /> 

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

Pour mon Java aspect que j'utilise:

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



Enfin le plugin officiel sorti depuis septembre 2015

Il s'agit d'une mise à jour de la réponse avec la version officielle du plugin. Pour utiliser Java 8 avec AspectJ, le plugin officiel maven aspectj se trouve sur ce lien:

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

Voici le lien vers le référentiel maven:

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

Comme indiqué dans la documentation, le code à utiliser est:

<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>
33
Federico Piazza