I am trying to run an example of AspectJ load time weawing. First I tried to do something myself, and nothing worked. Normal weawing works fine but when I try to pointcut some library using load time weawing - nothing happens.
Here is the example repository I am using - https://github.com/medvedev1088/aspectj-load-time-weaving-example
I made two cahnges:
1) I added class Main -
package com.example.aspectj;
import org.joda.time.Chronology;
import org.joda.time.base.AbstractDateTime;
public class Main {
public static void main(String[] args) {
AbstractDateTime time = new AbstractDateTime() {
@Override
public long getMillis() {
return 0;
}
@Override
public Chronology getChronology() {
return null;
}
};
System.out.println(time.toString());
}
}
2) I added following plugin to pom.xml to create runnable jar -
...
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<groupId>org.apache.maven.plugins</groupId>
<version>2.4.1</version>
<executions>
<execution>
<id>make-executable-jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.example.aspectj.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
...
I run this jar from a target directory using the following command:
java -jar aspectj-ltw-example-1.0-SNAPSHOT-jar-with-dependencies.jar
After this method that should be pointcutted is executed but ascpect is not.
You need to make sure that the weaving agent is started, it does not happen automatically for LTW scenarios.
java -javaagent:/path/to/aspectjweaver.jar -jar my.jar
This is also described in the AspectJ manual.
Caveat: Argument order is important. Make sure to put -javaagent
before -jar
, because everything after -jar
will be interpreted as application arguments, not JVM arguments.