java - AspectJ 错误 : Could not find or load main class aop.

标签 java aspectj

我正在学习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/

相关文章:

java - 如何使用java将此字符串转换为二维数组

java - 缺少方法体,或在 Java 中声明抽象

java - Java中使用线程并发模拟多核CPU

java - Java 泛型中的三个点是什么意思?

spring-boot - Spring Boot 加载时间编织在嵌入式 tomcat 中不起作用

java - 如何将方面定位到具有某种类型参数的方法?

java - 哪个性能更好 : test ! = null or null != test

java - 在没有 Spring 的情况下使用 AspectJ 日志记录

java - 实体方面( Spring )

java - 当切入点在父类(super class)上但派生类覆盖时,如何避免两次击中切入点?