【问题标题】:Android studio 3.1 not recognizing jar annotation processingAndroid studio 3.1 无法识别 jar 注释处理
【发布时间】:2018-03-28 08:44:28
【问题描述】:

我正在尝试在我的 android studio 项目中实现我自己的注释处理器。一切运行良好并编译,直到我将这个简单的行添加到 build.gradle 依赖块:

dependencies {
   .
   .
   .
   annotationProcessor(':processor')
}

那时我在编译时收到此错误:

找不到:处理器:。要求: project :app 在 build.gradle 文件中搜索

我学习了无穷无尽的教程,但似乎没有任何帮助。我最近刚刚升级到 AS 3.1,并认为这可能是相关的?

这是项目结构:(请注意 - 在这里我将注释处理器添加为 jar 文件。我还附加了一个图像,试图将其作为不同的模块和相同的结果)

这是一个不同的我正在尝试添加它 - 在同一个项目中使用不同的模块创建注释处理器,但仍然不行:

图片中的一些额外信息... 项目结构:

app.build:

processor.build:

注释:

主活动:

处理器实现:

【问题讨论】:

  • 从屏幕截图看来,您的项目中的任何位置都没有processor 目录。子项目源代码存放在哪里?您应该将源代码放在 gradle 项目树中,否则 ':subprojectname' 依赖项将不起作用。
  • 我的处理器是我在另一个项目中创建的 jar 工件。它不在子模块内
  • 然后删除annotationProcessor(':processor') 行。使用annotationProcessor 声明对libs/processor.jar另一个 依赖。我假设您的 jar 包含注释/库和处理器,不是吗?在这种情况下,必须在同一个工件上声明两个依赖项(annotationProcessorimplementationannotationProcessorcompileOnly)是正确的做法。
  • 你能举个语法例子吗?
  • 我添加了一个不同尝试的图像 - 处理器作为模块实现,但仍然没有。

标签: java android annotation-processing annotation-processor


【解决方案1】:

如果您将所有东西都放在同一个工件中——注解处理器,它是处理器用户使用的注解和库类,Android Gradle 插件要求您声明对同一工件的两个依赖项:

annotationProcessor project(':processor')
compile project(':processor')

annotationProcessor files('libs/processor.jar')
compile files('libs/processor.jar')

请注意,此类设置将来可能会不受支持。建议将处理器拆分为单独的模块并使其依赖于其余代码。这样做之后,您将能够像这样声明依赖项:

annotationProcessor project(':processor') // processor-only jar
compile project(':processor-api') // annotations and classes for user code

【讨论】:

  • 感谢您的回复 - 现在我可以编译项目了!现在看来,虽然它编译得很好——处理器从未被调用过。我已经编辑了我的问题,为项目结构和处理器实现等添加了额外的图片。很想得到你的帮助。
  • @Yosi199 您还没有发布META-INF/services/javax.annotation.processing.Processor 的内容。他们指向正确的类名吗?也打印到System.out 不一定会做任何事情。请记住,Gradle 在 Gradle 的 daemon 进程中运行编译,这可能只是将其标准输出重定向到 /dev/null。如果您想从处理器记录某些内容,请使用 Messenger
  • 谢谢,情况确实如此——编译成功后,我看不到任何输出,但我看错了地方。我的错。
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2017-08-02
  • 2018-07-18
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多