Статьи

Интеграция AspectJ с разработкой платформы NetBeans

Разрабатываете ли вы свой проект с использованием платформы NetBeans? Готовы ли вы использовать AspectJ для использования AOP? Вы не знаете, как интегрировать компилятор AspectJ в сборки NetBeans?

Если ваш ответ да, этот пост для вас.

Я решил написать этот технический пост, потому что некоторое время назад я изо всех сил пытался найти это решение, и поэтому я хотел бы поделиться им.

Расскажи историю

Некоторое время назад мне пришлось столкнуться с интеграцией AspectJ в приложение Rich Client Application, реализованное с использованием исходного кода платформы NetBeans. Первое принятое решение состояло в том, чтобы интегрировать AspectJ на уровне компиляции, чтобы создать уже скомпилированный исходный код, содержащий AOP.

Основной вопрос заключался в том, как интегрировать эту пост-компиляцию с файлами компиляции antbeans.

Решение

Прежде всего давайте определим файлы, которые должны быть изменены:

  1. common.xml: он находится в папке Harness вашей установки NetBeans
  2. project.properties: модуля, содержащего исходный код, который должен быть скомпилирован с AspectJ

Шаг 1

Загрузите библиотеки AspectJ и поместите их в папку, расположенную в папке «harness» вашей установки NetBeans. Допустим, эта папка называется: aspectj-xxx / lib.

Шаг 2

Зайдите в модуль, который содержит исходный код для компиляции с AspectJ и добавьте следующую строку в его файл project.properties (в важных файлах):

1
aspectjcompiler=required

Шаг 3

Теперь пришло время настроить файл common.xml. Именно здесь на самом деле находится цель ant, вызываемая IDE NetBeans при запуске действия сборки.

Этот пример сделан с использованием NetBeans 7.3.1, но для предыдущих или будущих изменений различия незначительны. Модификации выделены синим цветом.

Измените целевой компилятор следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<target name=”compile-nb-javac” depends=”init,up-to-date” unless=”is.jar.uptodate”>
<mkdir dir=”${build.classes.dir}”/>
<depend srcdir=”${src.dir}” destdir=”${build.classes.dir}” cache=”${build.dir}/depcache”>
<classpath refid=”cp”/>
</depend>
<nb-javac srcdir=”${src.dir}” destdir=”${build.classes.dir}” debug=”${build.compiler.debug}” debuglevel=”${build.compiler.debuglevel}” encoding=”UTF-8″
deprecation=”${build.compiler.deprecation}” optimize=”${build.compiler.optimize}” source=”${javac.source}” target=”${javac.target}” includeantruntime=”false”>
<classpath refid=”cp”/>
<compilerarg line=”${javac.compilerargs}”/>
<processorpath refid=”processor.cp”/>
</nb-javac>
<copy todir=”${build.classes.dir}”>
<fileset dir=”${src.dir}” excludes=”${jar-excludes}”/>
</copy>
</target>

Добавьте новую целевую компиляцию следующим образом:

1
2
3
4
5
6
7
8
<target name=”compile” depends=”init,up-to-date” unless=”is.jar.uptodate”>
<mkdir dir=”${build.classes.dir}”/>
<depend srcdir=”${src.dir}” destdir=”${build.classes.dir}” cache=”build/depcache”>
<classpath refid=”cp”/>
</depend>
<antcall target=”compile-nb-javac” inheritAll=”true” />
<antcall target=”compile-aspectj” inheritAll=”true” />
</target>

Добавьте новый целевой compile-aspectj следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<target name=”compile-aspectj” depends=”init,up-to-date” unless=”is.jar.uptodate” if=”aspectjcompiler”>
<property name=”cpProperty” refid=”cp”/>
<property name=”aspectj.lib.dir” location=”${harness.dir}/aspectj-x.x.x/lib”/>
<property name=”aspectjtools.jar” location=”${aspectj.lib.dir}/aspectjtools.jar”/>
<property name=”aspectjrt.jar” location=”${aspectj.lib.dir}/aspectjrt.jar”/>
<taskdef resource=”org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties”>
<classpath>
<pathelement path=”${aspectjtools.jar}”/>
</classpath>
</taskdef>
<iajc destdir=”${build.classes.dir}” source=”${javac.source}” fork=”true”
forkclasspath=”${aspectjtools.jar}” classpath=”${aspectjrt.jar};${cpProperty}”
failonerror=”false” >
<sourceroots>
<pathelement location=”${src.dir}”/>
</sourceroots>
</iajc>
</target>

Вывод

Теперь, когда вы выполните очистку и сборку, вы увидите, что исходный код выбранного модуля скомпилирован с использованием компилятора aspectj сразу после обычной компиляции.

Все, что вам нужно, это убедиться, что аспект и исходный код, которые должны быть скомпилированы с ним, находятся в одном модуле.

Ссылка: Интегрируйте AspectJ с NetBeans Development Platform от нашего партнера по JCG Марко Ди Стефано в блоге « Рефакторинг идей» .