AspectJ错误:无法找到或加载主类aop.HelloTest

时间:2016-11-15 02:27:34

标签: java aspectj

我学习了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

1 个答案:

答案 0 :(得分:1)

Aspectj有三个罐子:

  • aspectjrt - AspectJ运行时。包含通常由编织代码使用的类的最小jar。您应该在类路径
  • 上使用此jar运行编织代码
  • aspectjweaver - AspectJ编织者。如果尝试加载时间编织,则应该使用。
  • aspectjtools - AspectJ编译器。如果尝试运行ajc,则需要在类路径上。

启动编译器的脚本ajc会在调用编译器之前将aspectjtools放在类路径上。上面的每个jar包含早期jar的内容(因此工具包括编译器,weaver和运行时)。没有'runner'脚本,所以Nandor提到你需要确保在运行你的代码之前,aspectjrt.jar在类路径上,或者通过在发布时包括它来实现:

java -cp aspectjrt.jar:. aop.HelloTest

或在调用之前设置类路径:

export CLASSPATH=<ASPECTJHOME>/lib/aspectjrt.jar:.

java aop.HelloTest