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

问题描述:

我在学习aspectJ并遇到三个问题。为什么需要将所有jar文件添加到classpath中,而不是只添加aspectjrt.jar(如果只添加一个aspectjrt.jar文件,它将输出Could not find or load main class org.aspectj.tools.ajc.Main)?为什么我已经定义了主类并使用ajc编译成功,然后java packageName.MainClass错误?错误如下:AspectJ错误:无法找到或加载主类aop.HelloTest

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

'java命令aspectjrt.jar aop.HelloTest'可能? –

+0

在终端输入'echo $ CLASSPATH'输出这样的jar文件,完全相信'cp'不会让我失望。 – Crabime

有三个罐子在AspectJ:

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

启动编译器的脚本ajc将在调用编译器之前在类路径中放置aspectjtools。上面的每个jar包含早期jar的内容(所以工具包括编译器,编织器和运行时)。有没有“亚军”的脚本,从而Nandor提到你需要确保aspectjrt.jar是在类路径中运行代码之前,无论是通过包括它在启动时:

java -cp aspectjrt.jar:. aop.HelloTest

或调用之前设置CLASSPATH它:

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

java aop.HelloTest

+0

谢谢安迪,我的问题通过您的详细说明解决。但在这里我仍然有一个地方不明白,为什么'-cp aspectj.jar:.'?最后一点的目的是什么? – Crabime

+0

它确保当前目录位于类路径中。在上面的情况下可能没有必要,因为没有什么可以解决的。 –