я создал пользовательский Java аннотацию (код ниже) в проекте Maven 2 Я работаю на:Maven компилятор, только обобщит аннотированные классы
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 Compiler Plugin ограничить сложность на основе структуры пакета. Мой 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 компилировать только классы, которые были аннотированными с этой аннотацией, не в зависимости от того, где они находятся в иерархии пакетов?
(Я пытаюсь создать метамодель от модели домена классов, так что я могу указать на поля & методы без определения имен как константы Струнных - и изменять их вручную, когда я рефакторинг)
Edit: I Я уже делаю обработку аннотации в другой части фазы сборки. Система работает следующим образом:
- компилирования классов в указанных пакетах
- Использование JAnnocessor, строить метамоделей из классов с @MYANNOTATION
- Компиляция остальных классов
Зависимости от других классов к классам метамодели запрещается компилировать все за один раз, если мы не переместим аннотированные классы в другой проект и не добавим к нему зависимость. Это одна из возможностей, но может добавить сложность, потому что существующая структура проекта формирует логическое целое.
процессор аннотаций будет выполнять обработку классов, имеющих требуемый аннотацию, но исходный код нужно будет сначала обрабатывается компилятором, чтобы можно было найти аннотации. Единственный способ, с помощью которого я могу ограничить набор входных данных java-файлов компилятору только этими файлами с набором аннотаций, - это что-то вроде grep по всему набору исходных файлов (возможно, здесь можно использовать ant-плагин). Но даже тогда компилятор также загрузит классы, на которые ссылаются, и в любом случае вы можете разобрать все дерево источников. –