Subhash
Subhash

Reputation: 63

AspectJ Maven Plugin <weaveDependency>

I am trying to use aspectj maven plugin in our project that has multiple modules. Following the instructions given in this link http://mojo.codehaus.org/aspectj-maven-plugin/weaveJars.html

I am using @Aspectj annotation. My aspect is in a separate maven module called

artifactId - consumer

And the class whose method i want to intercept or advice is in

artifactId - producer

I have added the following configuration in the pom file of the consumer module:

      <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.4</version>
            <configuration>                 
                <source>1.6</source>
                <target>1.6</target>
                <showWeaveInfo>true</showWeaveInfo>
                <weaveDependencies>
                    <weaveDependency>
                        <groupId>com.home.demo</groupId>
                        <artifactId>producer</artifactId>
                    </weaveDependency>
                </weaveDependencies>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

Also added "producer" as a dependency in the same pom file.

When i am doing mvn clean install for the consumer module the following information comes in the console.

[INFO] [aspectj:compile {execution: default}] [INFO] Join point 'method-execution(void com.home.demo.producer.messaging.MomServiceEndpointListener.handle(com.home.messaging.service.MessageContext, com.home.messaging.service.MessageContext))' in Type 'com.home.demo.producer.messaging.MomServiceEndpointListener' (MomServiceEndpointListener.java:21) advised by before advice from 'com.home.demo.ods.app.OdsConsumer' (OdsConsumer.java:38)

But while executing the application, it's not working. The aspect is not getting invoked. I am not able to understand whether i am missing something.

Also i am having confusion whether the plugin configuration shown above should be in which module consumer(where my aspects are) or producer.

Upvotes: 2

Views: 5337

Answers (1)

Vitalii
Vitalii

Reputation: 31

The problem is that weaveDependencies act like sources only.

Your consumer module takes original "sources" from weaveDependencies (producer), weaves them with aspects and put weaved classes into consumer(!!!) target/classes.

Therefore, producer artifact never knows about aspects and you use it unchanged.

You have to re-build a producer jar using classes from consumer/target/classes. I don't think it's convenient, so i left my attempts to use this plugin in this way. Also, several weaveDependencies will be merged into one scrap-heap of classes.

You better try Aspects from your external jar dependency and plugin config that is built into producer.

Upvotes: 2

Related Questions