Java Android Studio 3.0中自定义注释处理器的NoClassDefFoundError
我有一个自定义的注释处理器,可以解析XML文件。它与Android Studio 2.3.3配合得很好,现在我已经将Android Studio升级到3.0版(稳定版),它突然开始为我的注释处理器的注释抛出Java Android Studio 3.0中自定义注释处理器的NoClassDefFoundError,java,android,annotations,android-studio-3.0,Java,Android,Annotations,Android Studio 3.0,我有一个自定义的注释处理器,可以解析XML文件。它与Android Studio 2.3.3配合得很好,现在我已经将Android Studio升级到3.0版(稳定版),它突然开始为我的注释处理器的注释抛出NoClassDefFound错误 Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > java.lang.NoClassDefFoundError: io/github/***/annotations/
NoClassDefFound
错误
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.NoClassDefFoundError: io/github/***/annotations/****
在格拉德尔
compile 'io.github.allaudin:****:1.0.0'
annotationProcessor 'io.github.allaudin:****-processor:1.0.0'
您必须迁移到新的android gradle插件:follow 在以前版本的插件中,编译类路径上的依赖项会自动添加到处理器类路径中。也就是说,您可以将注释处理器添加到编译类路径,它将按预期工作。但是,这会给处理器添加大量不必要的依赖项,从而对性能造成重大影响
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> java.lang.NoClassDefFoundError: io/github/***/annotations/****
使用Android插件3.0.0时,必须使用annotationProcessor依赖项配置将注释处理器添加到处理器类路径,如下所示:
依赖项{
...
annotationProcessor'com.google.dagger:dagger编译器:'
}
好的。通过在build.gradle
中将includeCompileClasspath
设置为true
,使其正常工作
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
}
}
对我正在这样做。然后我们需要更多信息:注释(未找到)在编译jar中,对吗?你可以发一个链接到源代码吗?我可以在Android Studio中看到源代码。这可能有什么问题?类路径和processorpath是不同的:因此,如果您的注释的java文件仅在processorpath上,并且在java源文件中使用注释,编译将失败,因为将只搜索类路径谢谢您的回答。注释是独立的,作为编译时依赖项包含。我发现
compile
已被弃用,implementation
是compile
的新版本。我已经进行了此更新,但在编译时仍然找不到注释。请记住,his只是一个解决方法(现在处理器路径上有整个编译类路径),并且此功能将在将来删除。请参阅感谢通知。正确的方法是什么?我也应该用processor打包注释吗?不。注释应该在主库jar中(您将其添加到编译类路径中),处理器项目应该只声明对库jar的依赖关系(因为它也需要注释):如另一条注释中所述,这是其他项目所做的:例如,这就是我正在做的,但我仍然需要在类路径中添加处理器。我不知道Android Studio 3.0有什么问题。我很肯定,AS3.0没有什么问题。我将许多lib与注释处理器一起使用。问题很可能是批注处理器的问题。由于您无法发布源代码,因此我可以向您指出一些示例:例如,您可以尝试在示例项目中使用不可变值
,然后将其与您自己的annotation processor项目进行比较。