Обработка пользовательских аннотаций, создание документации и Maven 3

Моя цель — «прочитать» классы Java определенного пакета, а затем обработать Javadoc и аннотации (желательно одновременно) для классов в этом пакете и для методов внутри этих классов. Решение должно быть реализовано на Java 6 или 7, инструмент сборки - Maven 3. В настоящее время мы используем maven-compiler-plugin, версию 2.5.1, но я, вероятно, могу обновить ее, если она доступна/необходима.

Насколько я понимаю, цель классов javax.annotation.processing состоит в том, чтобы делать такие вещи, и я считаю, что Java-код соответствует строкам этого другого SO answer должен работать для моих целей, но практические детали того, как заставить его работать, все еще немного нечеткие.

В общем, вот что мне нужно:

  1. Код Java для выбора нужных мне аннотаций и элементов Javadoc, а затем преобразования этих элементов в модель данных, необходимую для создания пользовательской документации.
  2. Java-код для записи этой модели данных в файл документации или каталог файлов.
  3. Maven 3 configuration to:
    1. Run the annotation processor once at a good time
    2. Включить сгенерированный каталог документов в выходной файл войны

Биты Maven сбивают меня с толку больше, чем код Java, поэтому, если вы собираетесь ответить только на половину, это половина, которая получит мою галочку. Кроме того, я бы предпочел не помещать этот процессор аннотаций в репозиторий Maven в качестве отдельного плагина, поскольку он будет очень тесно связан с некоторыми пользовательскими аннотациями, которые мы используем.

Вот краткий список вопросов, которые я нашел связанными, но я не смог синтезировать свой собственный ответ:


person Patrick    schedule 28.09.2012    source источник


Ответы (1)


Я не уверен, что вы можете получить доступ к Javadoc из процессоров аннотаций. Рассмотрите возможность использования Doclet API:

http://docs.oracle.com/javase/7/docs/technotes/guides/javadoc/doclet/overview.html

Изменить:

Вот процессор аннотаций, который я написал. Может быть, это может служить образцом:

http://softsmithy.hg.sourceforge.net/hgweb/softsmithy/lib/main-golden/file/ae786193023d/softsmithy-lib-core/src/main/java/org/softsmithy/lib/util/impl/ServiceProviderAnnotationProcessor.java

http://softsmithy.hg.sourceforge.net/hgweb/softsmithy/lib/main-golden/file/ae786193023d/softsmithy-lib-core/pom.xml

http://softsmithy.hg.sourceforge.net/hgweb/softsmithy/softsmithy-parent/main-golden/file/9397853ba514/pom.xml

Для Maven: насколько я помню, вы должны передать -proc:none в качестве аргумента компилятора (плагин компилятора) в проекте, содержащем обработчик аннотаций. В этот проект также добавьте следующий файл ресурсов: META-INF/services/javax.annotation.processing.Processor и добавьте полное имя вашего процессора аннотаций в первую строку.

Обычно я упаковываю аннотацию, процессор аннотаций и этот «файл реестра службы» в один и тот же проект A. Затем в любом другом проекте B, где я использую аннотацию и, следовательно, имею зависимость от этого проекта A, выбирается процессор аннотаций. вверх автоматически.

Я использую плагин компилятора Maven v2.3.2 и Java SE 7.

person Puce    schedule 28.09.2012
comment
Я видел их раньше, но у меня не сложилось впечатление, что они могут обрабатывать аннотации. Часть моей пользовательской документации будет получена из аннотаций веб-сервисов, таких как @Path и @Transactional - person Patrick; 28.09.2012
comment
Я могу ошибиться с точкой зрения getDocComment, но я думаю, что это позволяет мне получать Javadocs при обработке аннотаций - person Patrick; 28.09.2012
comment
Я предполагаю, что если аннотация имеет аннотацию @Documented, то у вас будет к ней доступ. (Это относится к @Transactional, но не к @Path). - person Puce; 28.09.2012
comment
Может быть, но это похоже на String. Может быть, вы можете извлечь метаинформацию из недокументированных аннотаций, которые вам нужны, с помощью процессора аннотаций --> записать эти метаданные в файл --> написать доклет, который читает Javadoc и ваши пользовательские метаданные. Но, возможно, есть более простой способ. - person Puce; 28.09.2012
comment
Необходимость обрабатывать аннотации как строки не была бы худшей вещью в этом конкретном начинании, если это проще, чем написание процессоров аннотаций. Однако я до сих пор понятия не имею, как настроить это для запуска через Maven3. - person Patrick; 28.09.2012