ajc и iajc - это расширения компилятора JDT, поставляемого с Eclipse. Итак, ajc и iajc будут генерировать точно такой же байтовый код для чистой Java, как и Eclipse (который содержит некоторые незначительные отличия от Oracle javac).
ajc и iajc в основном одинаковы, за исключением того, что iajc является инкрементным (это i в iajc). Это означает, что компилятор проверяет отметки времени и, если возможно, выполняет более разумную инкрементную сборку и избегает полных сборок (как при использовании AJDT внутри eclipse). Помимо этой функциональности, они по сути одинаковы. Смотрите здесь для получения дополнительной информации:
http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html
Если проект не содержит аспектов, использование компилятора ajc необязательно. Эти проекты могут быть на пути к проекту, который содержит аспекты. Для компиляции, содержащей аспекты стиля кода, вам необходимо использовать ajc.
Аспекты стиля аннотации немного отличаются. Если вы используете стиль аннотаций только для LTW, вы можете использовать javac для их компиляции, пока правильный aop.xml создан, weaver доступен во время выполнения.
Однако стиль аннотации с плетением CTW требует ajc.
В вашем конкретном случае, приведенном выше, вы можете скомпилировать TestProject
с помощью javac, если он находится во внутреннем пути вашего проекта аспекта. Это будет означать, что файлы классов вашего TestProject будут переписаны и объединены с файлами классов из вашего проекта аспекта.
Или, если вы используете LTW, вам не нужно добавлять свой TestProject
ни в какой inpath, и вы можете использовать javac. Но вы должны настроить свое приложение для LTW во время выполнения.
РЕДАКТИРОВАТЬ
Чтобы ответить на ваш комментарий ниже:
да. Вы можете сначала скомпилировать свой проект аспектов, используя задачу ajc или iajc. Затем вы можете скомпилировать второй, чистый java-проект, также используя задачу iajc и, дополнительно, поместив результаты вашего первого проекта в путь аспекта. Вы вообще не можете использовать для этого 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
см. Здесь:
http://www.eclipse.org/aspectj/doc/released/devguide/antTasks-iajc.html
person
Andrew Eisenberg
schedule
04.04.2011