我试图为一个项目学习aspectj。我希望使用ajc和java从终端运行java文件,但我无法这样做。
我有2个文件在我的目录HelloWorld.java和HWTracer.aj
www.example.com的内容Helloworld.java
public class HelloWorld {
public static void main(String[] args) {
printMsg("Hello, World!!");
}
public static void printMsg(String msg) {
System.out.println("\n");
System.out.println(" " + msg);
System.out.println("\n");
}
}
HWTracer.aj的内容
public aspect HWTracer {
// pointcuts
pointcut theMainMethod() : execution(public static void main(String[]));
pointcut theCall() : call (* HelloWorld.printMsg(*));
// advice
before(): theMainMethod() {
System.out.println("Before the Main");
}
// note this is after main is done, after the entire program finishes
after(): theMainMethod() {
System.out.println("After the Main");
}
before(): theCall() {
System.out.println("-- before the call --");
}
after(): theCall() {
System.out.println("-- after the call --");
}
}
下面是我用来编译代码的命令
ajc .\HelloWorld.java .\HWTracer.aj -cp C:\aspectj1.9\lib\aspectjrt.jar;C:\aspectj1.9\lib\aspectjtools.jar;C:\aspectj1.9\lib\aspectjweaver.jar
我使用以下命令运行编译后的文件:
java -cp C:\aspectj1.9\lib\aspectjrt.jar HelloWorld HWTracer
我得到了以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/NoAspectBoundException
at HelloWorld.main(HelloWorld.java:5)
请注意,我绝对不是JavaMaven。
1条答案
按热度按时间u0sqgete1#
在编译类路径上,
aspectjrt
应该足够了,就像在运行时路径上一样。在运行时类路径上,需要添加编译后的类文件所在的目录,在本例中,显然只是当前目录
"."
:还要注意的是,当运行主类时,不需要单独提及方面类,Java会将其解释为主类的命令行参数。
在你尝试理解像AspectJ这样复杂的工具之前,请先学习一些Java基础知识。如果你甚至不知道如何从命令行正确运行Java程序,也许现在还不是迈出第二步的时候。没有坚实基础的建筑往往会摇摇欲坠。