Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven编译器,仅编译带注释的类_Java_Maven_Maven 2_Annotations_Maven Compiler Plugin - Fatal编程技术网

Java Maven编译器,仅编译带注释的类

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

我在一个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
}
我目前正在使用来限制基于包结构的复杂性。我的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插件)。但即使这样,编译器也会加载引用的类,最终可能会解析整个源代码树。