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, ткачиха.
Однако, стиль аннотации с ткачеством CTW требует ajc.
В вашем конкретном случае выше, вы можете скомпилировать TestProject
, используя javac, если он находится на входе вашего аспектного проекта. Это будет означать, что файлы классов вашего TestProject будут переписаны и объединены с файлами классов из вашего аспектного проекта.
Или, если вы используете LTW, вам не нужно добавлять TestProject
в любой путь, и вы можете использовать javac. Но вы должны настроить приложение для LTW во время выполнения.
EDIT
Чтобы ответить на ваш комментарий ниже:
Да. Вы можете сначала скомпилировать свой проект аспектов, используя 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