纯 AspectJ 加载时间 weawing 不起作用

Pure AspectJ load time weawing does not work

我正在尝试 运行 AspectJ 加载时间的示例。首先,我尝试自己做一些事情,但没有任何效果。正常的 weawing 工作正常但是当我尝试使用加载时间 weawing 切入一些库时 - 没有任何反应。

这是我正在使用的示例存储库 - https://github.com/medvedev1088/aspectj-load-time-weaving-example

我做了两个 cahnges:

1) 我添加了 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) 我将以下插件添加到 pom.xml 以创建 运行nable 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