Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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注释处理器检查是否完全重建_Java_Maven_Annotation Processing - Fatal编程技术网

Java注释处理器检查是否完全重建

Java注释处理器检查是否完全重建,java,maven,annotation-processing,Java,Maven,Annotation Processing,我正在用Java创建一个注释处理器,我希望能够检查用户是否触发完全重建。 我希望能够区分完全重建和只构建几个文件 这可能吗?或者有什么解决办法吗 Edit1: 我将解释我想要实现的目标。我有一个注释处理器和10个注释。其中8个注释生成一个名为plugin.yml的配置文件。其中3个注释(两个过程中使用一个注释)用于生成名为AutoRegister.java的源文件。当我触发完全重建并处理所有注释时,这就像一个符咒。现在,当我只编译时,问题就出现了,假设使用我的注释的15个类中有3个。然后根据3个

我正在用Java创建一个注释处理器,我希望能够检查用户是否触发完全重建。 我希望能够区分完全重建和只构建几个文件

这可能吗?或者有什么解决办法吗

Edit1:

我将解释我想要实现的目标。我有一个注释处理器和10个注释。其中8个注释生成一个名为
plugin.yml
的配置文件。其中3个注释(两个过程中使用一个注释)用于生成名为
AutoRegister.java
的源文件。当我触发完全重建并处理所有注释时,这就像一个符咒。现在,当我只编译时,问题就出现了,假设使用我的注释的15个类中有3个。然后根据3个文件的注释生成
plugin.yml
AutoRegister.java
,因此是不完整的


我的解决方法是创建一个缓存文件,其中包含所有其他类的信息,这些类需要插入到两个文件
plugin.yml
AutoRegister.java
。这在某种程度上是可行的,但不可能从缓存中删除数据,例如,当我从类中删除注释时。因此,从缓存中删除数据的唯一方法是删除缓存文件并触发完全重建。

我不认为术语“变通”的含义与您所认为的相同。如果有一种方法可以区分,那就是“答案”,而不是“解决办法”。如果您详细说明了为什么需要这样做,可能有另一种解决方案可用,即不直接检测“完全重建”与“增量构建”,但这足以满足您的需要。这是一个解决办法,但你必须解释为什么你需要它,以便我们尝试帮助你

以下是我能想到的最常见的原因,解释您为什么需要这个:

假设AP将扫描所有源文件,并从中提取某种列表。例如,实现
com.derteufelqwe.MyAwesomeInterface
的所有类。然后,它把这个列表写在某个地方。比如说,
META-INF/services/com.derteufelqwe.MyAwesomeInterface
。问题是:在增量构建期间,您只看到所有源的子集,因此列表不完整,然后您在需要写入的地方写入它,现在您有一个断开的列表(因为它不完整)


解决这个问题的方法是,您可以向
文件管理器
请求源文件或类文件;即使它不是编译运行的一部分,它仍然在源路径或类路径上,您将得到一个结果。因此,如果您可以读取现有列表,并且可以根据条目提取负责该列表的源文件或类文件(在我们假设的创建服务文件的情况下,这很简单:条目本身就是一个完全限定的类名,您可以要求文件管理器查找)然后,如果该资源仍然存在,您可以查询文件管理器。如果是,保留它,如果不是,删除它。现在,您可以更新(而不是重新生成和替换)您的列表。

API没有提供此功能。你为什么会在乎?注释处理器的作用是生成额外的源,而不是做其他任何事情。如果你遵守这些限制,你就不应该关心它是什么类型的构建;我上面的答案原封不动地回答了你的问题。我的水晶球得了1分:)但是我怎么知道我需要向文件管理器申请哪些课程呢?我不知道该请求哪些类。请找到一种方法来翻译plugin.yml中的条目。或者更简单地生成另一个文件('inputs.txt'或诸如此类)。使用该选项可注册gen运行中使用的文件/类。