Maven пример предварительной обработки аннотации и генерации классов в одном и том же процессе компиляции? - PullRequest
13 голосов
/ 06 августа 2011

Есть ли у кого-нибудь чистый пример аннотации класса предварительной обработки проекта maven во время компиляции с последующим генерированием классов для компиляции в том же процессе компиляции?

Есть ли у кого-нибудь пошаговая процедура дляреализовать такой проект?

Ответы [ 3 ]

21 голосов
/ 07 августа 2011

После большой навигации по существующей документации в сети я пришел к следующему:

Что необходимо уточнить:

  • Чтобы обработать аннотации для данного проекта 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

  • Новый пакет был доставлен в Java 6 для обработки аннотаций: Обработка сменных аннотаций .
  • Чтобы реализовать процессор, создайте отдельный проект Maven. Приведенный выше учебник или этот объясняет, как действовать. Это наша библиотека S.
  • Затем создайте свой проект P и добавьте зависимость Maven от S.
  • В настоящее время существует проблема с maven-compiler-plugin , но возможен обходной путь здесь . Используйте его для компиляции сгенерированного кода как части существующего аннотированного кода.

... и генерация кода

  • Отличная библиотека для генерации кода Java под названием CodeModel доступна в Maven central. Хороший учебник доступен здесь . Пакет обработки аннотаций javax также предлагает некоторые инструменты для генерации вывода.
4 голосов
/ 18 января 2013

Плагин Maven-процессор может сделать это ...

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>
0 голосов
/ 06 августа 2011

Maven-Antlr-Plugin точно делает это.Он генерирует классы Java из грамматики, а плагин компиляции компилирует сгенерированные классы.Может быть полезно maven-annotation-plugin

...