gpt4 book ai didi

java - 混淆 ajc 如何与 javac 一起工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:40 25 4
gpt4 key购买 nike

我对 AspectJ 编译器 ajc 的工作方式有点困惑。根据我在谈论 CTW 时的理解,ajc 用于将方面编织到编译的字节码中 - 即:.class 文件。

但是,当我查看 AspectJ 的 maven-plugin (aspectj-maven-plugin) 时,发现它在 generate-sources 阶段运行maven,在 javac 编译器之前。这意味着编译器在方面编织之后运行。这是有道理的,因为您可以编织 ITD、修改类成员等,Java 编译器需要了解这些信息才能编译任何依赖类。

所以如果是这样,并且 ajc 在 javac 之前运行,我推测 ajc 必须首先将所有 java 代码编译成字节码才能织入任何方面。

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

最佳答案

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

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

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

关于java - 混淆 ajc 如何与 javac 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21316904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com