我在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 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只编译已使用此批注注释的类,而不是取决于它们在包层次结构中的位置?
(我试图从域模型类生成元模型,因此我可以指向字段和方法而不将名称定义为字符串常量 - 并在重构时手动更改它们)
编辑:我已在构建阶段的另一部分进行注释处理。系统的工作方式如下:
从其他类到元模型类的依赖性阻止了一次性编译所有内容,除非我们将带注释的类移动到另一个项目并向其添加依赖项。这是一种可能性,但可以增加复杂性,因为当前的项目结构似乎形成了一个逻辑整体。
答案 0 :(得分:2)
您可以使用注释处理执行类似的操作。我不认为你需要做任何特定于maven的事情,但你需要编写一个注释处理器,它必须是一个单独的库的一部分或单独编译。
在这篇博文中很好地解释了注释处理的概念:
Code Generation using Annotation Processors in the Java language – part 2: Annotation Processors