我正在学习aspectJ,遇到了三个问题。为什么需要将所有jar文件添加到类路径,而不仅仅是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
最佳答案
Aspectj中有三个jar:
- aspectjrt - AspectJ 运行时。一个最小的 jar,其中包含编织代码通常使用的类。您应该在类路径上使用此 jar 运行编织代码
- aspectjweaver - AspectJ 编织器。如果尝试加载时编织,则应使用。
- aspectjtools - AspectJ 编译器。如果尝试运行 ajc,则需要位于您的类路径中。
脚本ajc
在调用编译器之前,启动编译器会将aspectjtools放在类路径上。上面的每个 jar 都包含早期 jar 的内容(因此工具包括编译器、编织器和运行时)。没有“运行程序”脚本,因此 Nandor 提到您需要在运行代码之前确保aspectjrt.jar 位于类路径上,可以通过在启动时包含它来实现:
java -cp aspectjrt.jar:. aop.HelloTest
或在调用之前设置类路径:
export CLASSPATH=<ASPECTJHOME>/lib/aspectjrt.jar:.
java aop.HelloTest
关于java - AspectJ 错误 : Could not find or load main class aop.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601043/