Пример предварения аннотации Maven и генерации классов в том же процессе компиляции?
У кого-нибудь есть чистый пример аннотаций класса предварительной обработки проекта maven во время компиляции с последующим поколением классов, которые должны быть скомпилированы в том же процессе компиляции?
Есть ли у каждого поэтапная процедура для реализации такого проекта?
Ответы
Ответ 1
После многократной навигации по существующей документации в сети я придумал следующее:
Что нужно уточнить:
- Для обработки аннотаций по заданному проекту P сначала нужен обработчик аннотации, скомпилированный в отдельной библиотеке S. P должен иметь зависимость от S.
- Реализация обработки аннотаций в Java 5 абсолютно не то же самое, что и в Java 6.
- Java 5 полагается на отдельное выполнение apt. Соответствующие учебники здесь и здесь помогают понять основы обработки и реализации аннотации в Java 5. Хорошее чтение для новичков.
- Реализация обработки аннотаций в Java 5 с Maven сложна. Нужно добавить локальную зависимость к
tools.jar
для доступа к API, описанному в этих руководствах. Не чисто. Некоторые сторонние плагины, вызывающие apt, доступны, но не хорошо документированы.
- Те, кто использует Java 6, должны не запускать свои процессоры в соответствии с приведенными выше учебниками.
Обработка аннотаций в Java 6 с помощью Maven
- Новый package был доставлен на Java 6 для обработки аннотаций: Вставная обработка аннотаций.
- Чтобы реализовать процессор, создайте отдельный проект Maven. В приведенном выше руководстве или this объясняется, как действовать. Это наша библиотека S.
- Затем создайте свой проект P и добавьте зависимость Maven от S.
- В настоящее время существует проблема с maven-compiler-plugin, но обходной путь доступен здесь. Используйте его, чтобы скомпилировать сгенерированный код как часть существующего аннотированного кода.
... и генерация кода
- Отличная библиотека генерации кода Java, называемая CodeModel, доступна из центра Maven. Хороший учебник доступен здесь. В пакете обработки аннотации javax имеются некоторые инструменты для генерации вывода.
Ответ 2
maven-processor-plugin может сделать это...
https://code.google.com/p/maven-annotation-plugin/
Пример из документации:
<build> <plugins>
<!-- Run annotation processors on src/main/java sources -->
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<executions>
<execution>
<id>process</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<!-- Disable annotation processors during normal compilation -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
</plugins> </build>
Ответ 3
Maven-Antlr-Plugin точно делает это. Он генерирует классы Java из грамматики, а плагин компиляции сгенерирует сгенерированные классы. Может ли это быть полезным maven-annotation-plugin