w3hello.com logo
Home PHP C# C++ Android Java Javascript Python IOS SQL HTML videos Categories
Spring + AspectJ weaving for java 8 using aspectj-maven-plugin

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
epositoryorgcodehausmojoaspectj-maven-plugin1.7-SNAPSHOTaspectj-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>




© Copyright 2018 w3hello.com Publishing Limited. All rights reserved.