ajc和iajc是Eclipse附带的JDT编译器的扩展。因此,ajc和iajc将为Eclipse生成与纯Java完全相同的字节代码(其中包含与Oracle的javac的一些细微差别)。
ajc和iajc基本相同,只是iajc是增量的(就是 一世 在iajc)。这意味着编译器会检查时间戳,并在可能的情况下执行更智能的增量构建,并避免完全构建(就像在eclipse中使用AJDT时一样)。除了这个功能,它们基本相同。浏览此处获取更多信息:
http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html
如果项目不包含任何方面,则使用ajc编译器是可选的。这些项目可以位于包含方面的项目的inpath中。要编译包含代码样式方面,那么您需要使用ajc。
注释风格方面有点不同。如果仅对LTW使用注释样式,则只要创建了正确的aop.xml,就可以使用javac来编译它们,而weaver在运行时可用。
但是,CTW编织的注释样式确实需要ajc。
在上面的特定情况下,您可以编译 TestProject 使用javac,只要它在您的方面项目的inpath中。这意味着将重新编写TestProject的类文件,并将其与方面项目中的类文件结合使用。
TestProject
或者,如果您使用LTW,那么您不需要添加您的 TestProject 到任何inpath你可以使用javac。但是,您必须在运行时为LTW设置应用程序。
编辑
要回答以下评论:
是。您可以先使用ajc或iajc任务编译方面项目。然后,您还可以使用iajc任务编译第二个纯Java项目,另外还可以将第一个项目的结果放在方面路径上。你根本不能使用javac。
ant build.xml代码段看起来像这样:
<project name="simple-example" default="compile" > <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"> <classpath> <pathelement location="${home.dir}/tools/aspectj/lib/aspectjtools.jar"/> </classpath> </taskdef> <target name="compile" > <iajc sourceroots="${home.dir}/TestProject-Aspects/src" classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" destDir="${home.dir}/TestProject-Aspects/bin"/> <iajc sourceroots="${home.dir}/TestProject/src" classpath="${home.dir}/tools/aspectj/lib/aspectjrt.jar" destDir="${home.dir}/TestProject/bin" aspectPath="${home.dir}/TestProject-Aspects/bin"/> </target> </project>
有关详细信息,请参见此处 iajc :
iajc