搞不懂AJC与javac的工作方式

Confused how ajc works with javac(搞不懂AJC与javac的工作方式)

本文介绍了搞不懂AJC与javac的工作方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有点搞不懂AspectJ编译器ajc的工作原理。据我所知,在谈到CTW时,AJC用于将方面编织到编译后的字节代码中--即.class文件。 但是,当我查看AspectJ的maven-plugin(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计划,我不知道。

这篇关于搞不懂AJC与javac的工作方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:搞不懂AJC与javac的工作方式

基础教程推荐