java - @Generated 注解使用 gradlew + dagger

标签 java gradle kotlin dagger gradlew

我在使用 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-commonGeneratedAnnotations找出哪个@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/

相关文章:

kotlin - 在 Kotlin 中将大型 Inputstream 写入文件

Kotlin flatmap 解包数据类列表

java - HBase:从 HDFS 加载主协处理器

java - 我可以在 JVM 在 OOM 上调用的脚本中使用 "kill %p"

gradle - 如何让 android studio (gradle) 使用 Sun/Oracle Java?

android - 将现有列表转换为json/文本文件,以便向前读取该文件中的数据以生成列表

java - Java 项目的 Oracle 数据库连接不稳定

java - PSQL异常 : this ResultSet is closed

java - 没有 JSF 的 Facelets

android-studio - Erro在Android Studio中找不到crash.jar