【问题标题】:Annotation Processor - Multiple modules注释处理器 - 多个模块
【发布时间】:2022-10-18 14:07:00
【问题描述】:

我有 3 个模块。其中两个生成了类,第三个我想根据其他两个模块生成的类生成一个映射器。

我已将其他 2 个模块作为依赖项添加到 3 个模块,但注释处理器从未被调用。

生成的类具有正确的注释,如果我在第三个模块上创建带有注释的类,则会调用注释处理器。

我的感觉是 3 模块无法从其他模块获取类,因为它们已经编译。

有没有办法解决这个问题?

谢谢

dependencies {
    implementation(project(":module-1"))
    implementation(project(":module-2"))

    annotationProcessor(project(":processor"))
}

【问题讨论】:

  • 你使用构建工具吗?如果是这样,您可以共享构建配置(例如 pom.xml 或 build.gradle)吗?
  • @dan1st 我没有什么特别的,只有依赖关系,没有别的。
  • 请注意,注释处理器不处理依赖项。如果你想处理你的依赖,那些工件需要自己声明/使用注解处理器。

标签: java annotation-processing


【解决方案1】:

一种可能的方法是在前 2 个模块中生成某种字典,这可能是一个包含对所有生成类型的引用的类,例如每个模块可能会生成一个像这样的类

@ModuleClasses({TypeA.class, TypeB.class, TypeC.class})    
public class ModuleATypeRegistery {
       
}

现在在第三个模块中,您可以定义一个可以列出这些类的注释,也许它会进入 package-info

@MyGeneratedClassesRegistry({ModuleATypeRegistery.class,ModuleBTypeRegistery.class})
package com.mycompany.sample;

然后你实现你的第三个模块注释处理器,以便在需要时考虑这些包信息

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 2013-10-30
    • 1970-01-01
    • 2013-05-27
    • 2023-03-04
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多