Eclipse Luna не сохраняет код, сгенерированный обработкой аннотаций

Я запускаю Eclipse Luna (4.4.1) под Ubuntu 14.10 (Utopic Unicorn) и имею проект, который использует обработку аннотаций для проверки определенных форм в коде и генерации служебного кода. В eclipse код не создается.

Во-первых, процессоры отлично работают с javac. Во-вторых, процессоры ДЕЙСТВИТЕЛЬНО работают в Eclipse. Если я изменю их, чтобы выбросить исключения, Eclipse сообщает об этом. Также, если я предоставлю процессорам искаженный код (например, пару геттеров / сеттеров разных типов), он правильно сообщает об ошибке (красные волнистые линии, правильное сообщение об ошибке, целых девять ярдов).

Ни код не появляется в .apt_generated, ни файлы классов не генерируются.

Я попытался отключить их и снова включить, запустив новый проект, попробовал его на новой установке Eclipse, изменил версию проекта с 1.7 на 1.8 и обратно, попробовал пакетный режим, а не пакетный режим, изменив .apt_generated каталог, дважды проверил разрешения на .apt_generated, возможно, еще несколько вещей, которые я не могу вспомнить.

На данный момент я просто запускаю javac отдельно и думаю о том, чтобы сделать этот наш первый проект Apache Ant или Maven, если это поможет, но я бы предпочел не совсем на этом этапе.

Кому-нибудь повезло с генерацией кода в Eclipse? Что еще нужно сделать или проверить?


person electroCutie    schedule 05.01.2015    source источник


Ответы (2)


  • Убедитесь, что ваш проект настроен на фактическое использование APT, как показано в https://www.eclipse.org/jdt/apt/introToAPT.php. Имейте в виду, что это настройки проекта, а не настройки рабочего пространства.
  • Убедитесь, что ваш потенциально сгенерированный код не удален какой-либо другой частью вашего рабочего процесса. Например. второй процессор очищает каталог, в который сгенерировал первый процессор.
  • Убедитесь, что вы используете JDT, а не JRE как для запуска Eclipse, так и для сборки вашего проекта.
  • Убедитесь, что org.eclipse.jdt.apt.core является частью вашей установки Eclipse, поскольку это фактическая интеграция процессора аннотаций для JDT.
  • Убедитесь, что ваш процессор имеет правильно заполненный файл META-INF/services/javax.annotation.processing.Processor, указывающий на правильный класс, реализующий процессор. В противном случае Eclipse может проигнорировать это.

При этом я использовал разные процессоры аннотаций (например, масляный нож для Android) в Eclipse на протяжении многих лет и не сталкивался с такими проблемами.

person Bananeweizen    schedule 05.01.2015
comment
Как я уже сказал, процессоры работают в Eclipse. Подтверждено, поскольку процессоры устанавливают ошибки в коде там, где это необходимо, с помощью Messager.printMessage () - person electroCutie; 05.01.2015
comment
О, и чтобы смягчить ваше другое беспокойство, что другой процессор уничтожает каталог, я не верю, что это так. Мало того, что нет других запущенных процессоров, но и каталог, когда он заполняется javac, не очищается даже при полной перестройке в eclipse. Хотя это не абсолютное доказательство, я считаю, что оно довольно убедительное. - person electroCutie; 05.01.2015

У меня была аналогичная проблема с аннотациями AutoValue, которые не обрабатывались в Eclipse 2019-3 с OpenJDK 11 в качестве целевой среды выполнения. В панели «Журнал ошибок» Eclipse я увидел эту ошибку:

java.lang.Exception: java.lang.UnsupportedClassVersionError:
javax/lang/model/element/ModuleElement has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0

Eclipse работал на старой установке Java 8, как указано Help -> About Eclipse IDE -> Installation Details -> Configuration. В моем случае Eclipse обнаружил, что JRE запускается в переменной среды PATH, см. здесь. Я заставил Eclipse использовать установку OpenJDK 11, добавив аргумент -vm в Eclipse.ini:

-vm
"C:\path\to\OpenJDK\bin\server\jvm.dll"
person Dennie    schedule 29.04.2019