Spring + AspectJ weaving for java 8 using aspectj-maven-plugin

前端 未结 1 995
误落风尘
误落风尘 2020-12-02 23:44

I\'m migrating my project from java 7 to java 8 and the problem I have is related to aspectj weaving using aspectj-maven-plugin.

I could configure succe

相关标签:
1条回答
  • 2020-12-03 00:15

    Solution before the official release prior to Sep 2015

    After many headaches and many hours struggling against this, fortunately I could solve this problem. Here is what I did:

    To use aspectj-maven-plugin with Java 8 I could configure version aspectj-maven-plugin 1.7 (Note that aspectj-maven-plugin 1.6 works for Java 7).

    So, the maven plugin configuration needs to be:

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

    By the way, the aspectJ jars needed are:

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

    The most important thing I've struggled was that to install the aspectj-maven-plugin 1.7 jar I had to do it manually since these jar/pom files aren't on maven repo yet.

    Update: So, the jar file can be downloaded from Haus Jira link (look at the Attachment section). If Haus is not available anymore you can download it from my github:

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

    After download it and copy it to my local repo I needed to create my own aspectj-maven-plugin-1.7-SNAPSHOT.pom file within the directory:

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

    I based on a copy from version 1.6 but had to modify the following content:

    <version>1.7-SNAPSHOT</version>
    
    <properties>
        <aspectjVersion>1.8.1</aspectjVersion>
        <mavenVersion>2.2.1</mavenVersion>
        <changesPluginVersion>2.9</changesPluginVersion>
    </properties>
    

    That's all here you go, hope to help.

    Update: (adding more details as Xtreme Biker asked in the comments)

    In my context configuration I have:

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

    For my java aspect I use:

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



    Finally official plugin released since Sep 2015

    This is an update to the answer with the official plugin release. In order to use Java 8 with AspectJ, the official aspectj maven plugin can be found on this link:

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

    Here is the link to maven repository:

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

    As the documentation stated the code to use it is:

    <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>
    
    0 讨论(0)
提交回复
热议问题