@gradlew +匕首生成注释

时间:2018-11-07 09:49:51

标签: java gradle kotlin dagger gradlew

我正在使用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:错误:找不到符号   @ 生成

但是,如果我运行任务from Android Studio,则任务成功,并且在匕首生成的类中没有@Generated

您是否有避免使用@Generated的{​​{1}}注释的线索?

5 个答案:

答案 0 :(得分:7)

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

当我将 Kotlin 版本从 1.3.51 升级到 1.4.31

时问题解决了

这个问题似乎已经被报告并解决了:

答案 1 :(得分:4)

Dagger使用auto-common的{​​{1}}找出要使用的GeneratedAnnotations注释。它是基于类路径来完成的。

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

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

答案 2 :(得分:1)

如果你有:

<块引用>

javax注解不存在

我的 macOS 上有这个问题 出现这个错误是因为你的jdk高于1.8

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

//Resolve jdk8+ Generation Annotations - javax annotation does not exist
compileOnly 'com.github.pengrad:jdk9-deps:1.0'

答案 3 :(得分:0)

更改为嵌入Android Studio版本,仅进行清理!(不重建)改进@kiskae保护

答案 4 :(得分:0)

在尝试使用 Gradle 构建项目时,我在 Android Studio 中也收到了“package javax.annotation.processing does not exist import javax.annotation.processing.Generated”。 由于某些原因,我无法升级项目中的任何依赖项。在这种情况下,什么对我有用:

  1. 不仅要安装 Java 8,而不是安装任何更高的 Java 版本(您可以从这里下载,例如:https://www.oracle.com/ru/java/technologies/javase/javase-jdk8-downloads.html),
  2. 还要检查项目结构 -> SDK 位置 -> JDK 位置 并确保此文件夹确实包含 jdk。例如,要选择的正确选项可以从 JAVA_HOME 开始。

我的情况是,在一些更新之后,这个位置默认设置为不包含任何 jdk 的嵌入式 JDK,作为 Android 的新手,我花了几个小时试图找出我的 Java 8 出了什么问题.