这是不得已的问题。我在互联网上搜索了所有可能出错的地方,但似乎没有任何工作。我已经创建了一个自定义注释,它应该生成一个资源文件,这些类如下所示:
@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()
方法的时间,或者我的文件夹结构是错误的?任何帮助都将不胜感激!
我发了问题后就想通了。我将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 这是编译过程及其输出,正如您所看到的,没有关于