代码之家  ›  专栏  ›  技术社区  ›  crgarridos

@使用gradlew+dagger生成注释

  •  1
  • crgarridos  · 技术社区  · 7 年前

    我使用gradlew(4.10.2)+dagger(2.18)面对一个奇怪的问题。

    ./gradlew :app:compileDebugAndroidTestKotlin 
    

    生成失败,原因是:

    任务:Common:compileDebugJavaWithJavac失败

    /CommonModule\u ProvidesGsonFactory.java:6:错误:包javax.annotation.processing不存在 导入javax.annotation.processing。

    /CommonModule\u ProvidesGsonFactory.java:8:错误:找不到符号 生成 (

    但如果我执行任务 from Android Studio ,任务成功 @Generated 不是 出现在匕首生成类中。

    你有什么线索可以避免 @生成 注释使用 ./gradlew

    1 回复  |  直到 7 年前
        1
  •  24
  •   Cool    5 年前

    匕首用途 auto-common GeneratedAnnotations @Generated 要使用的批注。它是基于类路径来实现的。

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

    潜在的原因可能是代码是使用较新版本的JDK生成的,并且增量构建无效,需要完整的“clean&如果注释处理器运行在Java9+上,而android编译为Java8或更低版本,则java语言级别存在问题。

    使用 ./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path> 解决了问题。

        2
  •  8
  •   AliSh    5 年前

    当我把我的Android工作室升级到4.2时,我遇到了这个问题

    当我离开的时候问题就解决了

        3
  •  2
  •   Fortran    5 年前

        4
  •  1
  •   Adnan Abdollah Zaki    5 年前

    如果您有:

    我的macOS上有这个问题 发生此错误是因为jdk高于1.8

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

    //Resolve jdk8+ Generation Annotations - javax annotation does not exist
    compileOnly 'com.github.pengrad:jdk9-deps:1.0'
    
        5
  •  0
  •   Daria Khilova    5 年前

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

    1. 不仅如此 安装Java 8 https://www.oracle.com/ru/java/technologies/javase/javase-jdk8-downloads.html ),
    2. 而且 签出项目结构->SDK位置->JDK位置

    我的情况是,经过一些更新后,这个位置被默认设置为嵌入式JDK,它不包含任何JDK,作为Android的新手,我花了几个小时试图找出java8的错误。