搞不懂AJC与javac的工作方式
我有点搞不懂AspectJ编译器ajc
的工作原理。据我所知,在谈到CTW时,AJC用于将方面编织到编译后的字节代码中--即.class文件。
aspectj-maven-plugin
)时,发现它是在maven的generate-sources
阶段运行的,在javac编译器之前。这将意味着编译器在方面编织之后运行。这是有意义的,因为您可以编织ITD、修改类成员等,Java编译器需要知道这些才能编译任何依赖类。
因此,如果是这种情况,并且ajc
在javac之前运行,我假设ajc
必须首先将所有Java代码编译成字节码才能在任何方面进行编织。
ajc
已经完成了将所有Java代码编译成字节码的工作,为什么还要运行javac呢?为什么ajc
不是唯一需要的编译器?让两个人同时参选难道不是重复了努力吗?另外,javac
如何处理ajc
已经编译的类?它是否只是忽略它们,因为自生成.class文件以来,源文件中没有任何更改?
解决方案
ajc可以编译所有类,它构建在eclipse Java编译器上。AJC是生成类所需的唯一编译器。
就重复的工作而言,javac很可能不会覆盖时间戳比源Java文件更新的.class文件。您还可以想象构建时,一些源代码是用AJC编译的,而另一些则是用javac编译的。至于maven计划,我不知道。
相关文章