Java Android studio 3.1无法识别jar注释处理

Java Android studio 3.1无法识别jar注释处理,java,android,annotation-processing,annotation-processor,Java,Android,Annotation Processing,Annotation Processor,我正试图在我的android studio项目中实现我自己的注释处理器。在我将以下简单行添加到build.gradle dependencies块之前,所有这些都运行良好并可以编译: dependencies { . . . annotationProcessor(':processor') } 此时,我在编译时出现以下错误: 找不到:处理器:。要求: 项目:build.gradle文件中的应用程序搜索 我听了无数的教程,但似乎没有任何帮助。我最近刚升级到AS 3.1,

我正试图在我的android studio项目中实现我自己的注释处理器。在我将以下简单行添加到build.gradle dependencies块之前,所有这些都运行良好并可以编译:

dependencies {
   .
   .
   .
   annotationProcessor(':processor')
}
此时,我在编译时出现以下错误:

找不到:处理器:。要求: 项目:build.gradle文件中的应用程序搜索

我听了无数的教程,但似乎没有任何帮助。我最近刚升级到AS 3.1,我想这可能有关系吗

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

我尝试添加一个不同的模块-在同一个项目中使用不同的模块创建注释处理器,但仍然没有成功:

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

app.build:

processor.build:

注释:

主要活动:

处理器实现:


如果您在同一工件中拥有所有内容,-注释处理器,它的注释和库类,由处理器用户使用,Android Gradle插件要求您声明同一工件上的两个依赖项:

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

请注意,将来可能不支持这种设置。建议将处理器拆分为单独的模块,并使其依赖于代码的其余部分。执行此操作后,您将能够像下面这样声明依赖项:

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

如果您在同一工件中拥有所有内容,-注释处理器,它的注释和库类,由处理器用户使用,Android Gradle插件要求您在同一工件上声明两个依赖项:

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

请注意,将来可能不支持这种设置。建议将处理器拆分为单独的模块,并使其依赖于代码的其余部分。执行此操作后,您将能够像下面这样声明依赖项:

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

从屏幕截图上看,项目中似乎没有
处理器
目录。子项目源代码存储在哪里?您应该将源代码放在gradle项目树中,否则
':subprojectname'
依赖项将不起作用。我的处理器是我在另一个项目中创建的jar工件。它不在子模块内,请删除注释处理器(“:处理器”)行。使用
annotationProcessor
声明对
libs/processor.jar的另一个依赖项。我假设您的jar同时包含注释/库和处理器,不是吗?在这种情况下,必须声明两个依赖项(
annotationProcessor
implementation
annotationProcessor
compileOnly
)在同一个工件上是正确的做法。您能展示一个语法示例吗?我添加了一个不同尝试的图像-处理器作为模块实现,但仍然没有任何内容。从屏幕截图上看,您的项目中似乎没有
处理器
目录。子项目源代码存储在哪里?您应该将源代码放在gradle项目树中,否则
':subprojectname'
依赖项将不起作用。我的处理器是我在另一个项目中创建的jar工件。它不在子模块内,请删除注释处理器(“:处理器”)
行。使用
annotationProcessor
声明对
libs/processor.jar的另一个依赖项。我假设您的jar同时包含注释/库和处理器,不是吗?在这种情况下,必须声明两个依赖项(
annotationProcessor
implementation
annotationProcessor
compileOnly
)在同一个工件上是正确的做法。你能展示一个语法示例吗?我添加了一个不同尝试的图像-处理器实现为一个模块,但仍然没有。感谢回复-现在我可以编译项目了!现在看来,尽管它编译得很好,但处理器从未被调用。我已经编辑了我的问题,为项目结构和处理器实现等添加了额外的图片。希望您能提供帮助。@Yosi199您尚未发布
META-INF/services/javax.annotation.processing.Processor
的内容。它们是否指向正确的类名?同时,打印到
System.out
也不一定会有任何作用。记住,Gradle在Gradle的守护进程中运行编译,这可能只是将其标准输出重定向到/dev/null。如果您想从处理器中记录一些内容,请使用
Messenger
谢谢。事实就是如此——在成功编译之后,我看不到任何输出,但我找错了地方。我的不好。谢谢你的回复-现在我可以编译项目了!现在看来,尽管它编译得很好,但处理器从未被调用。我已经编辑了我的问题,为项目结构和处理器实现等添加了额外的图片。希望您能提供帮助。@Yosi199您尚未发布
META-INF/services/javax.annotation.processing.Processor
的内容。它们是否指向正确的类名?同时,打印到
System.out
也不一定会有任何作用。记住,Gradle在Gradle的守护进程中运行编译,这可能只是将其标准输出重定向到/dev/null。如果您想从处理器中记录一些内容,请使用
Messenger
谢谢。事实就是如此——在成功编译之后,我看不到任何输出,但我找错了地方。我的错。