@gradlew +匕首生成注释

crg*_*dos 9 java gradle kotlin dagger gradlew

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

问题是当我打电话时:

./gradlew :app:compileDebugAndroidTestKotlin 
Run Code Online (Sandbox Code Playgroud)

构建失败并显示:

任务:Common:compileDebugJavaWithJavac FAILED

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

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

但是,如果我从Android Studio运行任务,则该任务成功,并且在匕首生成的类中@Generated 存在。

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

Adn*_*aki 29

如果你有 :

javax注解不存在

我在 macOS 上遇到此问题,出现此错误是因为您的 jdk 高于 1.8

只需在应用程序的 build.gradle 上添加以下代码即可。

//Resolve jdk8+ Generation Annotations - javax annotation does not exist
compileOnly 'com.github.pengrad:jdk9-deps:1.0'
Run Code Online (Sandbox Code Playgroud)

  • 我在 macOS 上遇到了同样的问题,添加这个解决了我的问题:y: (2认同)

Ali*_*iSh 10

当我将 Android Studio 更新到 4.2 时遇到了这个问题

当我将 Kotlin 版本从 1.3.51 升级到 1.4.31时问题解决

似乎在这个问题中报告并解决了这个问题:


Kis*_*kae 9

匕首用途auto-commonGeneratedAnnotations找出哪些@Generated注释使用。它基于类路径执行此操作。

这意味着在注释处理器运行时,javax.annotation.processing.Generated生成器可用并在其中使用它,但是当结果文件在另一个任务中编译时,它不再位于类路径中。

可能的原因可能是代码是使用较新版本的JDK生成的,并且增量生成无效,需要完整的“清理和重建”,或者Java语言级别存在问题,其中注释处理器在Java 9+上运行,但是android被编译为Java 8或更低版本。

  • 实际上,我正在使用系统jdk(java9)运行`。/ gradlew`。使用`./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home = <Android studio jre path>`解决了问题。谢谢 :) (6认同)
  • 如何在不使用命令行参数的情况下设置jre路径:/sf/answers/1484895331/ (3认同)