困惑ajc如何使用javac

Eri*_* B. 6 java aop aspectj javac compile-time-weaving

我有点困惑AspectJ编译器如何ajc工作.据我所知,在谈论CTW时,ajc用于将方面编织到编译的字节码中 - 即:.class文件.

但是,当我查看AspectJ(aspectj-maven-plugin)的maven-plugin时,事实证明它是在generate-sourcesmaven阶段运行,在javac编译器之前.这意味着编译器在编织方面之后运行.这是有道理的,因为你可以编织ITD,修改类成员等,java编译器需要知道这些,以便编译任何依赖类.

因此,如果是这种情况,并ajc在javac之前运行,我认为ajc必须首先将所有java代码编译成字节代码才能在任何方面编织.

所以问题是,如果ajc已经经历了将所有java代码编译成字节代码的努力,为什么javac甚至需要运行呢?为什么不是ajc唯一需要的编译器?是不是两个都只是重复努力?另外,如何javac处理ajc已编译的类?是否只是忽略它们,因为自生成.class文件以来源文件没有变化?

aep*_*iet 3

ajc可以编译所有的类,它构建在eclipse java编译器上。ajc 是生成类所需的唯一编译器。

就重复工作而言,javac 很可能不会覆盖时间戳比源 java 文件更新的 .class 文件。您还可以想象一些源代码是用 ajc 编译的,还有一些是用 javac 编译的。

就 Maven 调度而言,我不知道。