当前位置: 首页 > 知识库问答 >
问题:

不运行Ant process()的Eclipse中的注释处理器

公孙高轩
2023-03-14

这是不得已的问题。我在互联网上搜索了所有可能出错的地方,但似乎没有任何工作。我已经创建了一个自定义注释,它应该生成一个资源文件,这些类如下所示:

@Target(METHOD)
@Retention(CLASS)
@Repeatable(Schedules.class)
public @interface Scheduled {

    /**
     * Specifies one or more minutes with in an hour. 
     */
    int[] minute() default {};
    
    /**
     * Specifies one or more hours within a day.
     */
    int[] hour() default {};
    
    /**
     * Specifies one or more days in a month
     */
    int[] date() default {};
    /**
     * Specifies one or more months within a year.
     */
    int[] month() default {};
    
    /**
     * Specifies one or more days within a week.
     */
    int[] dayOfWeek() default {};

}

@Target(METHOD)
@Retention(CLASS)
public @interface Schedules {

    Scheduled[] value();
}
@SupportedAnnotationTypes({"files.application.Scheduled"})
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class ScheduledProcessor extends AbstractProcessor {
    
    @Override
    public synchronized void init(ProcessingEnvironment env) {
        super.init(env);
    }
    
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
       ...
    }
    
    public void buildFile(ArrayList<String> scheduledList) {
       ...
    }
}
public class AnnotationTest {
    private int age;
    private String name;
    
    @Scheduled
    public void setAge(int age) {
        this.age = age;
    }
    
    public int getAge() {
        return this.age;
    }
    
    @Scheduled(month= {7,8})
    @Scheduled(date= {5,6})
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return this.name;
    }
}
    <target name="-compile" depends="-pre-compile,-classpath-compile">
        <mkdir dir="${build.bin}"/>
        <javac
            destdir="${build.bin}" 
            encoding="UTF-8"
            includeAntRuntime="false" 
            debug="true" 
            debuglevel="${build.javac.debuglevel}"
            source="${build.javac.source}"
            target="${build.javac.target}"
        >
            <src path="${build.source}" />
            <src path="${build.gen}" />
            <classpath refid="classpath.compile" />
            
            <compilerarg line="-processor files.application.ScheduledProcessor"/>
            <compilerarg line="-s ${build.source}" />
        </javac>

我当前的项目结构是:

core
    src
        annotsProject
                 Scheduled.java
                 Schedules.java
                 ScheduledProcessor.java
                 AnnotationTest.java
        META-INF
             services
                  javax.annotation.processing.Processor
    anttasks.xml

当我运行compile ANT任务时,init(ProcessingEvironment env)被成功调用,但是process(Set annotations,RoundEnvironment roundEnv)从未被调用。我尝试创建处理器和META-INF文件夹的。jar文件,并将其添加到项目构建路径中,但没有成功。我尝试从命令行使用javac,但仍然一无所获。也许我误解了应该调用process()方法的时间,或者我的文件夹结构是错误的?任何帮助都将不胜感激!

共有1个答案

俞衡虑
2023-03-14

我发了问题后就想通了。我将AnnotationTest.java移动到它自己的项目TestProj中,并将TestProj的依赖项添加到我们使用的Core的ivy.xml中。我编译了core,它成功地完成了,但是没有显示任何关于注释处理器的信息。然后,我用一个单独的ant命令构建了它的工件。然后我编译了TestProj,它确实在注释处理器中显示了我的printmessage(),我的process()。我检查了我想要创建的文件的输出位置,它就在那里!我认为使用批注处理器的.jar方法是正确的方向,但我可能把它放在了错误的位置,以说明我们的项目是如何设置的。我们使用的artifactsAnt命令为我构建了.jar并将其放在适当的位置,以便TestProj能够看到它。张贴我的答案,以防对任何人有帮助。

 类似资料:
  • 建筑格拉德尔 注释 加工机 \资源\META-INF\javax.annotation.processing.处理器 注释消费者 建筑格拉德尔 这应该是一个非常简单的注释处理器,只是打印调试语句。对我来说,这一切似乎都是正确的,但是在我构建/运行项目2时没有运行。我也尝试过覆盖和。那没有做任何事情。也尝试过没有,那也没有改变任何事情。 编辑:为什么我可以获得

  • 我要从马文换到格雷德。 下面是我以前在pom.xml中的内容 我的身材看起来像: 但是当我用格雷的时候 当我运行 gradle 构建时,我实际上可以在构建/生成/源代码/apt/main/...我的包/类,但由于它没有在eclipse中启用,所以我.apt_generated文件夹中没有任何内容。 EDIT我得到了gradle,用构建的一部分。gradle但是eclipse似乎没有在.apt生成的

  • 有人知道如何在Android项目中启用Eclipse中的注释处理吗?我做了以下工作: 使用处理器和META-INF创建Java项目 如果我从文件夹中删除jar文件,Eclipse会报告项目中的错误,因为找不到注释处理器。但是,如果处理器就位并且配置了Eclipse,则不会进行处理 如果我在标准Java项目中使用相同的处理器,它就可以正常工作<有人能帮我吗?谢谢

  • 我有一个包含2个模块的maven项目。其中一个模块包含注释处理器。当我尝试将项目作为Android项目的依赖项导入时,它不会运行注释处理器。找不到生成的类文件。 我从jitpack导入如上所示的项目。jitpack上的构建成功了,我也可以在本地访问代码,这意味着编译成功了。但是应该生成的类并没有生成。所以要么是处理器没有启动,要么是我生成的类在错误的位置?android项目确实使用了许多其他带有注

  • 我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?

  • 我有下面的课程。两个注释(AnnotA和AnnotB),一个类的子类。java'(带@AnnotA)及其“父”基。java'(带有@AnnotB)。 编译子对象时。java,我的注释处理器报告AnnotA,但它不报告在Base中找到的注释(AnnotB)。JAVA 安诺塔。JAVA 阿诺特。JAVA 基础JAVA 小孩JAVA MyProc。JAVA 这是编译过程及其输出,正如您所看到的,没有关于