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的工作方式
基础教程推荐
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01