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

指定注释处理器的顺序

梁华清
2023-03-14

我正在尝试在我的Java项目中运行Dagger2和Lombok。当然,龙目岛必须先跑,但它是否真的跑了,似乎要看机会。起初,我怀疑我可以通过库jar在类路径中各自的位置来指定顺序,但这个顺序显然被忽略了。

有没有一种方法可以指定它们运行的顺序,或者我只能忍受不能组合两个AP?

我已经生成了一个SSCCE测试用例。

一个简单的Git Clone&MVN compile就足以说明这个问题--如果您在app.java中注释第18行而取消注释第20-21行,它就会编译,即使第18行中的Lombok符号创建了一个相同的构造函数。问题是龙目岛似乎在追着匕首跑。

共有1个答案

栾钟展
2023-03-14

经过大量的研究,并与一位Lombok开发人员交谈后发现,由于javac基于hashCode()进行类加载,因此在此场景中运行的注释处理器的顺序基本上是随机的,更糟糕的是,在多个运行之间是随机的。目前似乎没有解决这个问题的办法。

我使用了lombok-maven插件,并对整个程序进行了解禁,虽然这并不完美,而且有些拙劣,但至少产生了一个工作结果。希望它能帮助未来的谷歌人来到这里,我将工作版本提交给了回购。

 类似资料:
  • 问题内容: 我正在尝试在Java项目上运行Dagger 2和Lombok。当然,龙目岛必须首先运行,但是它的确存在取决于机会。起初,我怀疑我可以通过类路径中库jar的相应位置来指定顺序,但是该顺序显然被忽略了。 有没有办法指定它们以某种方式运行的顺序,还是我必须忍受不能合并两个AP的情况? 我制作了一个SSCCE测试用例。 一个简单的&就足以说明问题- 如果在App.java中注释第18行和取消注

  • 我使用抽象处理器创建了一个自定义注释和注释处理器。这意味着我想在编译之前进行注释处理。我将自定义注释和处理器导出为Jar,并尝试将其与简单的java测试程序一起使用。我确信在编译时它会找到我的java处理器类,但不知何故,我并没有得到我在控制台上期望的o/p。下面是我的处理器中处理方法的代码。 此外,我故意使用以便我得到一个版本警告,它确认当我执行一个测试类时,它找到了我的注释处理器。 这里是我的

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

  • 需要注释处理器的帮助。我创建了一个简单的注释处理器,它使用@autoservice注释来检查注释的字段是否为最终字段。但它没有显示任何编译时错误。这是我的配置 注释: 注释处理器: pom文件: 测试文件:

  • 我在编译使用我的注释处理器的代码时收到以下错误: 关于如何调试这个有什么提示吗?错误输出根本没有用处。有没有办法得到更详细的错误?

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