javamavenaspectjaspects

Using aspects from other jars


What I'm trying to accomplish is the following:

I have a server with the following structure.

bin
   apis
   services
   etc...

I want to define an API that contains an aspect to be used by services. Say:

@Aspect
public class AuthorizationAspect {
    @Pointcut("call(* *()) && @annotation(Authorization)")
    public void cutAuthorize() { }

    @Before("cutAuthorize()")
    public void callFromAuthorizeBefore() {
        System.out.println("Test");
    }
}

Then I define the service and annotate the methods I want with @Authorization and it gets pointcut by that aspect.

Things you should know:

My question is, how can I do this? How do I define my maven artifacts to accomplish that?

I noticed that the aspectj plugin has a weaveDependencies section, but this will also include in the service JAR all classes in that API (something that I want to avoid). Is this the right move?

Thanks in advance,

Rui


Solution

  • Take a look at how it's done in jcabi-aspects. You declare/compile your aspects in the API and then use this JAR as we com.jcabi:jcabi-aspects is being used in the example:

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>aspectj-maven-plugin</artifactId>
      <configuration>
        <aspectLibraries>
          <aspectLibrary>
            <groupId>com.jcabi</groupId>
            <artifactId>jcabi-aspects</artifactId>
          </aspectLibrary>
        </aspectLibraries>
      </configuration>
    </plugin>
    

    It's OK to have your aspects JAR in provided (or runtime) scope.