【问题标题】:How to exclude java classes from being compiled with annotation processing?java - 如何通过注释处理将java类排除在编译之外?
【发布时间】:2015-08-23 19:19:11
【问题描述】:

我有两个注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Ann {
    public String description() default "AAA";
    public String template() default "BBB";
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface AnotherAnn {
    public String text() default "Text";
}

带有注释方法的简单类:

public class App {
    @Ann(description = "Desc", template = "Templ")
    public void someMethod(){}
}

我想创建App 类的新副本并将复制类中的@Ann 注释(在someMethod 方法之前)替换为@AnotherAnn
方程注解处理后App类的副本:

public class AppCopy {
    @AnotherAnn(text = "Text")
    public void someMethod(){}
}

然后我应该将App 类排除在编译之外。 处理器:

@SupportedAnnotationTypes("alexiuscrow.annotation.Ann")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class Proc extends AbstractProcessor {

    public Proc() {
        super();
    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        /* TODO CREATE COPY & EXCLUDE ORIGINAL */
        return true;
    }
}

我该怎么做?

【问题讨论】:

  • 把你正在尝试的java代码,提供更多细节。
  • 您找到解决问题的方法了吗?我对它很感兴趣。

标签: java annotations annotation-processing


【解决方案1】:

以下是从注释处理中排除某些 Java 类的两种通用方法:

  1. 运行编译器两次。第一次,在不运行注释处理器的情况下编译整个项目。第二次,命令行应该包括注解处理器并且应该只列出你想要运行注解处理器的文件。只有编译器编译的文件才会进行注释处理。这包括通过命令行传递的文件,以及那些依赖于其 .class 文件不是最新的文件。

  2. 在注释处理器中编写逻辑以跳过某些文件的处理。

方法 #1 是我使用的方法。

【讨论】:

  • 您可以谷歌“如何用 Java 编写注释处理器”。 :-) 那里有很多教程。
  • 我知道如何编写注释处理器,但我不知道如何跳过某些文件的处理。
  • 在注解处理器中写一个Javaif测试,这样当满足指定条件时它就不起作用了。
  • 有人写过注释处理器来跳过文件吗?
猜你喜欢
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多