Я немного запутался, как работает компилятор AspectJ, ajc
. Насколько я понимаю, когда мы говорим о CTW, ajc используется для вплетения аспектов в скомпилированный байт-код, то есть в файл .class.
Однако, когда я смотрю на maven-plugin для AspectJ (aspectj-maven-plugin
), оказывается, что он запускается на generate-sources
фазе maven перед компилятором javac. Это означало бы, что компилятор запускается после переплетения аспектов. В этом есть смысл, поскольку вы можете вплетать ITD, изменять члены классов и т. Д., О чем компилятору java необходимо знать, чтобы скомпилировать любые зависимые классы.
Так что, если это так, и ajc
запускается до javac, я предполагаю, что ajc
должен сначала скомпилировать весь java-код в байтовый код, чтобы иметь возможность переплетать любые аспекты.
Итак, вопрос в том, что если ajc
уже предпринимает усилия по компиляции всего java-кода в байт-код, почему javac вообще нужно запускать? Почему ajc
не единственный компилятор, который требуется? Разве оба запуска не дублируют усилия? Кроме того, как javac
обрабатывает классы, которые ajc
уже скомпилированы? Он просто игнорирует их, поскольку в исходном файле нет изменений с момента создания файла .class?