猿问

@Generated annotation 使用 gradlew + dagger

我在使用 gradlew(4.10.2) + dagger(2.18) 时遇到了一个奇怪的问题。

问题是当我打电话时:

./gradlew :app:compileDebugAndroidTestKotlin

构建失败:

任务 :Common:compileDebugJavaWithJavac FAILED

/CommonModule_ProvidesGsonFactory.java:6: 错误:包 javax.annotation.processing 不存在导入 javax.annotation.processing。生成;

/CommonModule_ProvidesGsonFactory.java:8: 错误:找不到符号@生成的(

但是,如果我从 Android Studio运行该任务,则该任务会成功并且@Generated 不会出现在 dagger 生成的类中。

您是否有一些线索可以避免使用@Generated注释./gradlew


翻过高山走不出你
浏览 475回答 3
3回答

喵喔喔

Dagger 使用auto-common'sGeneratedAnnotations来确定@Generated要使用哪个注释。它根据类路径执行此操作。这意味着当注解处理器正在运行时,javax.annotation.processing.Generated在生成器中可用并使用,但是当生成的文件在另一个任务中编译时,它不再在类路径上。潜在原因可能是代码是使用较新版本的 JDK 生成的,并且增量构建无效,需要完整的“清理和重建”,或者注释处理器在 Java 9+ 上运行的 Java 语言级别存在问题,但是android 被编译为 Java 8 或更低版本。使用./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path>解决了问题。

紫衣仙女

如果你有 :javax注解不存在我在我的 macOS 上有这个问题,这个错误发生是因为你的 jdk 高于 1.8只需在您的应用程序的 build.gradle 上添加以下代码。//Resolve jdk8+ Generation Annotations - javax annotation does not existcompileOnly 'com.github.pengrad:jdk9-deps:1.0'

Cats萌萌

当我将 Android Studio 更新到 4.2 时遇到了这个问题当我将 Kotlin 版本从 1.3.51 升级到 1.4.31时问题解决了似乎在这个问题中报告并解决了这个问题:https://github.com/google/dagger/issues/1449https://youtrack.jetbrains.com/issue/KT-32804
随时随地看视频慕课网APP

相关分类

Java
我要回答