纯 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。
我正在尝试 运行 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。