Я создал пользовательскую аннотацию Java (код ниже) в проекте Maven 2, над которым я работаю:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MYANNOTATION{}
В одной части сборки Maven я хочу только скомпилировать классы, аннотированные этой аннотацией, например:
@MYANNOTATION
public class MyClass {
// Code here
}
В настоящее время я использую плагин компилятора Maven, чтобы ограничить сложность на основе структуры пакета. . Мой файл pom.xml похож на приведенный ниже, ограничивая компиляцию классами в **com.foo.bar.stuff** и **com.baz.foo.more**. Это неудовлетворительно, потому что, когда я добавляю аннотированные классы в com.xyz.bar.foo, я должен не забыть определить его в файле pom.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<includes>
<include>**/com/foo/bar/stuff/**</include>
<include>**/com/baz/foo/more/**</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Есть ли способ определить Maven для компиляции только классов, которые были аннотированы этой аннотацией, независимо от того, где они расположены в иерархии пакетов?
(Я пытаюсь создать метамодель из классов модели предметной области, чтобы я мог указывать на поля и методы, не определяя имена как строковые константы и изменяя их вручную при рефакторинге)
Изменить: я уже обрабатываю аннотации на другом этапе сборки. Система работает так:
- Скомпилировать классы в указанные пакеты
- Используя JAnnocessor, создавайте метамодели из классов с @MYANNOTATION.
- Скомпилируйте остальные классы
Зависимости от других классов к классам метамодели не позволяют скомпилировать все за один раз, если только мы не переместим аннотированные классы в другой проект и не добавим к нему зависимость. Это одна из возможностей, но она может добавить сложности, потому что текущая структура проекта, кажется, образует логическое целое.