@ Сгенерированная аннотация с использованием gradlew + dagger

Я столкнулся со странной проблемой, используя 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(

Но если я запустил задачу из Android Studio, задача будет успешной и @Generatedне является присутствует в сгенерированном кинжалом классе.

У вас есть какие-то подсказки, чтобы избежать аннотации @Generated с помощью ./gradlew?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
23
0
12 918
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Dagger использует auto-commonGeneratedAnnotations, чтобы выяснить, какую аннотацию @Generated использовать. Это делается на основе пути к классам.

Это означает, что пока работает процессор аннотаций, javax.annotation.processing.Generated доступен и используется в генераторе, но когда результирующий файл компилируется в другой задаче, его больше нет в пути к классам.

Возможные причины могут заключаться в том, что код был сгенерирован с использованием более новой версии JDK, а инкрементная сборка недействительна, требуя полной «очистки и перестройки», или существует проблема с уровнями языка Java, на которых процессор аннотаций работает на Java 9+, но android скомпилирован как Java 8 или ниже.

Использование ./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path> решило проблему.

Фактически я запускал ./gradlew с системным jdk (java 9). Использование ./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path> решило проблему. Спасибо :)

crgarridos 07.11.2018 11:08

Это хорошее различие - сборка с использованием кнопки воспроизведения работала, потому что в среде IDE использовался JDK, входящий в состав Android Studio. Спасибо

dazza5000 20.02.2019 18:13

@crgarridos, сэр, вы сэкономили мне ЧАСЫ! Я люблю вас!

noloman 12.03.2019 17:27

как установить путь jre без использования параметра командной строки: stackoverflow.com/a/21212790/1363742

luca992 24.07.2019 01:16

изменить на встроенную версию студии Android и только чистую! (не перестраивать) Улучшить ответ @kiskae

У меня была эта проблема, когда я обновил свою Android Studio до 4.2.

Проблема решилась когда я обновить версию Kotlin с 1.3.51 до 1.4.31

Кажется, проблема сообщена и решена в этом выпуске:

если у вас есть :

javax annotation does not exist

У меня эта проблема на моей macOS эта ошибка возникает из-за того, что ваш jdk выше 1,8

просто добавьте ниже код в build.gradle своих приложений.

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

У меня была такая же проблема с macOS, и добавление этого решило мою проблему: y:

Nazanin Nasab 08.10.2021 20:29

Я также получил "пакет javax.annotation.processing не существует import javax.annotation.processing.Generated" в Android Studio при попытке собрать проект с помощью Gradle. По некоторым причинам я не могу обновить какие-либо зависимости в проекте. Что сработало для меня в этом случае:

  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.

Другие вопросы по теме