Confused how ajc works with 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的工作方式
- 转换 ldap 日期 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 获取数字的最后一位 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01