Java Maven编译器,仅编译带注释的类
我在一个Maven 2项目中创建了一个自定义Java注释(代码如下):Java Maven编译器,仅编译带注释的类,java,maven,maven-2,annotations,maven-compiler-plugin,Java,Maven,Maven 2,Annotations,Maven Compiler Plugin,我在一个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
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
}
我目前正在使用来限制基于包结构的复杂性。我的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>
org.apache.maven.plugins
,从带有@MYANNOTATION的类构建元模型
编译其余的类
从其他类到元模型类的依赖关系阻止了一次性编译所有内容,除非我们将带注释的类移动到另一个项目并向其中添加依赖关系。这是一种可能性,但会增加复杂性,因为当前的项目结构似乎形成了一个逻辑整体。您可以通过注释处理执行类似的操作。我不认为您需要做任何特定于maven的事情,但是您需要编写一个注释处理器,该处理器必须是单独库的一部分,或者单独编译
注释处理的概念在这篇博客文章中有很好的解释:
注释处理器将对具有请求注释的类执行处理,但编译器需要首先解析源代码,以便找到注释。我能看到的唯一方法是,将编译器的java文件输入集限制为仅包含一组注释的文件,这是通过对整个源文件集进行grep(这里可能可以使用ant插件)。但即使这样,编译器也会加载引用的类,最终可能会解析整个源代码树。