我在我正在处理的 Maven 2 项目中创建了一个自定义 Java 注释(下面的代码):
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.xml 中定义它。
<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 的类构建元模型
- 编译其余的类
从其他类到元模型类的依赖关系会阻止一次性编译所有内容,除非我们将带注释的类移动到不同的项目并为其添加依赖关系。这是一种可能性,但会增加复杂性,因为当前的项目结构似乎形成了一个合乎逻辑的整体。