首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混淆了ajc与javac的工作方式

混淆了ajc与javac的工作方式
EN

Stack Overflow用户
提问于 2014-01-24 02:51:59
回答 3查看 3.1K关注 0票数 6

我有点搞不懂AspectJ编译器ajc是如何工作的。据我所知,当谈到CTW时,ajc被用来将方面编织到编译后的字节代码中-即:.class文件。

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

因此,如果是这种情况,并且ajc在javac之前运行,我认为ajc必须首先将所有java代码编译成字节码,才能在任何方面进行编织。

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

EN

回答 3

Stack Overflow用户

发布于 2014-01-24 03:10:02

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

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

至于maven调度,我不知道。

票数 3
EN

Stack Overflow用户

发布于 2014-05-22 14:26:02

Aspectj不需要javac来编译java代码。某些以前版本的AspectJ有此要求。据我所知,通过使用-usejavac标志,javac仍然可以用作ajc后端。您还可以在预处理器模式下运行ajc,以生成要使用javac或其他Java编译器编译的java source (.java)文件。

所以答案是javac根本没有运行,没有重复的工作。

票数 1
EN

Stack Overflow用户

发布于 2014-05-23 02:23:39

我想知道你所观察到的aspectj maven插件的阶段是否是AspectJ还是一个源代码转换器时遗留下来的。这是在AspectJ 1.2之前。当时,它生成的源代码必须经过编译器(javac)。现在情况不再是这样了,ajc可以编译从源代码到代码的所有内容。或者有时在javac之后使用它来编织东西。例如,如果使用注解风格的方面,您可以使用javac编译代码,然后使用ajc对这些类文件进行二进制编织,将方面编织到其他类中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21316904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档