我正在尝试运行AspectJ加载时间调整的示例。首先,我尝试自己做某事,但没有任何效果。正常的编排效果很好,但是当我尝试使用加载时间编排切入某些库时,什么也没发生。
这是我正在使用的示例存储库-https://github.com/medvedev1088/aspectj-load-time-weaving-example
我做了两次挑战:
1)我添加了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)我将以下插件添加到pom.xml中以创建可运行的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>
...
我使用以下命令从目标目录运行此jar:
java -jar aspectj-ltw-example-1.0-SNAPSHOT-jar-with-dependencies.jar
在执行此方法后,应该切入点,但没有执行ascpect。
您需要确保编织代理已启动,对于LTW场景,它不会自动发生。
java -jar my.jar -javaagent:/path/to/aspectjweaver.jar
在AspectJ manual中也有描述。
更新:实际上,AspectJ LTW无法与-jar
一起使用,我暂时忘记了这一点。但是,如果您改用它,它将起作用:
java -cp my.jar -javaagent:/path/to/aspectjweaver.jar com.example.aspectj.Main
有关说明,请参阅我的其他答案here。