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




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> решило проблему.
Это хорошее различие - сборка с использованием кнопки воспроизведения работала, потому что в среде IDE использовался JDK, входящий в состав Android Studio. Спасибо
@crgarridos, сэр, вы сэкономили мне ЧАСЫ! Я люблю вас!
как установить путь jre без использования параметра командной строки: stackoverflow.com/a/21212790/1363742
изменить на встроенную версию студии 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:
Я также получил "пакет javax.annotation.processing не существует import javax.annotation.processing.Generated" в Android Studio при попытке собрать проект с помощью Gradle. По некоторым причинам я не могу обновить какие-либо зависимости в проекте. Что сработало для меня в этом случае:
В моем случае после некоторого обновления это местоположение было установлено по умолчанию как встроенный JDK, который не содержал jdk, и, будучи новичком в Android, я провел пару прекрасных часов, пытаясь выяснить, что не так с моей Java 8.
Фактически я запускал
./gradlewс системным jdk (java 9). Использование./gradlew compileDebugAndroidTestKotlin -Dorg.gradle.java.home=<Android studio jre path>решило проблему. Спасибо :)