невозможно расширить AbstractProcessor для создания процессора аннотаций Java

Я пытаюсь начать создавать процессор аннотаций javax, пока я делаю это из студии Android. Мне просто нужна зависимость gradle, которую я думаю для этого. Прямо сейчас в gradle у меня есть следующее, что я пробовал:

provided 'javax.annotation:jsr250-api:1.0'

но когда я пытаюсь создать следующий класс, он говорит, что не может найти класс AbstractProcessor:

class MyAnnotationProcessor extends AbstractProcessor{
}

Как мне заставить его распознавать этот класс?

вот точная ошибка:

введите здесь описание изображения

и мой импорт выглядит так:

введите здесь описание изображения

и вот моя версия Java:

 $java -version 
Picked up JAVA_TOOL_OPTIONS: -Xmx512m -Xms64m
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

person j2emanue    schedule 16.03.2016    source источник
comment
У вас есть импорт в вашем классе? Какая у вас версия jdk?   -  person jbunting    schedule 16.03.2016
comment
Я на Java 6. Я вставил импорт, но он не распознан   -  person j2emanue    schedule 16.03.2016
comment
Поделиться со всем классом? Поделитесь точным сообщением об ошибке?   -  person jbunting    schedule 16.03.2016
comment
Я отправил фото проблемы.   -  person j2emanue    schedule 16.03.2016
comment
Похоже, что-то не верит, что вы используете java 8. Возможно, ваша IDE указывает на более старую версию JDK? Для использования AbstractProcessor не требуется никаких зависимостей — он поставляется с Java.   -  person jbunting    schedule 16.03.2016
comment
вот точная версия JDK, которую моя IDE использует. Я получил это из самих настроек IDE, дайте мне знать, правильно ли это: /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home   -  person j2emanue    schedule 16.03.2016


Ответы (2)


AbstractProcessor недоступен в модуле библиотеки Android. Чтобы заставить его работать, вы можете создать отдельный модуль «java-библиотеки» и добавить его зависимость в свой основной модуль. Ниже приведено пошаговое описание решения, которое сработало для меня:

  1. Создайте новый модуль в своем проекте Android. Щелкните правой кнопкой мыши свой проект -> Создать -> Модуль -> выберите Java Library
  2. Следуйте инструкциям, чтобы добавить имя модуля, имя пакета и т. д. и завершить
  3. Теперь создайте новый класс CustomAnnotationProcessor в этой библиотеке и расширьте класс AbstractProcessor.

  4. Ниже приведен снимок моего пользовательского процессора аннотаций:

    import java.util.Set;
    import javax.annotation.processing.AbstractProcessor;
    import javax.annotation.processing.RoundEnvironment;
    import javax.lang.model.element.TypeElement;
    
    public class CustomAnnotationProcessor extends AbstractProcessor{
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    return false;
    }
    }
    
  5. Добавьте параметры компиляции в ваше приложение/build.gradle для java 1.7. см. следующий снимок: введите здесь описание изображения

  6. Добавьте зависимость этого вновь созданного модуля в ваш основной модуль.

  7. Скомпилируйте и запустите..!!

Не забудьте поставить лайк, если вам понравился мой ответ :)

person Vinay    schedule 06.09.2016
comment
Так можно ли создать файл, содержащий классы Android? - person canaanhhh; 22.09.2017
comment
Потратил несколько часов! Спасибоуууу :) - person yahya; 23.12.2017

У меня возникла такая же проблема, и я нашел решение. См. ссылку ниже:

  • Полностью удалите модуль Java из макета проекта.
  • Убедитесь, что выживает только ваш код, удалите все (или, может быть, будет достаточно только файла .iml?) Другие вещи в каталоге модуля.
  • Добавьте свои источники снова как модуль Java Library. Теперь все должно работать.

https://stackoverflow.com/a/32933935/3899061

person xojan    schedule 24.04.2016