我学习了aspectJ并遇到了三个问题。为什么需要将所有jar文件添加到classpath而不仅仅是aspectjrt.jar(如果只添加一个aspectjrt.jar文件,它将输出Could not find or load main class org.aspectj.tools.ajc.Main
)?为什么我已经定义了主类并成功使用ajc编译然后java packageName.MainClass错误?错误如下:
Error: Could not find or load main class aop.HelloTest
这是代码:
package aop;
public class HelloTest {
public static void main(String[] args) {
Hello hello = new Hello();
hello.hello();// hello method just outout one word
}
}
//aspectj class which under the same aop package, attention these two file are not in the same file.
public aspect AspectJTest {
before(): execution(* aop.*.*(..)){
System.out.println("stimulate authority check");
}
}
这是我的工作流程:
ajc -d . *.java
java aop.HelloTest
答案 0 :(得分:1)
Aspectj有三个罐子:
启动编译器的脚本ajc
会在调用编译器之前将aspectjtools放在类路径上。上面的每个jar包含早期jar的内容(因此工具包括编译器,weaver和运行时)。没有'runner'脚本,所以Nandor提到你需要确保在运行你的代码之前,aspectjrt.jar在类路径上,或者通过在发布时包括它来实现:
java -cp aspectjrt.jar:. aop.HelloTest
或在调用之前设置类路径:
export CLASSPATH=<ASPECTJHOME>/lib/aspectjrt.jar:.
java aop.HelloTest