我在使用 gradlew(4.10.2) + dagger(2.18) 时遇到了一个奇怪的问题。
问题是当我打电话时:
./gradlew :app:compileDebugAndroidTestKotlin
构建失败:
Task :Common:compileDebugJavaWithJavac FAILED
/CommonModule_ProvidesGsonFactory.java:6: error: package javax.annotation.processing does not exist import javax.annotation.processing.Generated;
/CommonModule_ProvidesGsonFactory.java:8: error: cannot find symbol @Generated(
但如果我运行任务 from Android Studio ,任务成功并且 @Generated
不出现在 Dagger 生成的类中。
你有什么线索可以避免使用 ./gradlew
的 @Generated
注释吗?
最佳答案
Dagger 使用auto-common
的GeneratedAnnotations
找出哪个@Generated
要使用的注释。它基于类路径执行此操作。
这意味着当注释处理器运行时,javax.annotation.processing.Generated
在生成器中可用并使用,但是当生成的文件在另一个任务中编译时,它不再位于类路径中。
可能的原因可能是代码是使用较新版本的 JDK 生成的,并且增量构建无效,需要完全“清理和重建”,或者注释处理器在 Java 9 上运行的 Java 语言级别存在问题+,但 android 编译为 Java 8 或更低版本。
使用 ./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path>
解决了问题。
关于java - @Generated 注解使用 gradlew + dagger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53186989/