Подтвердить что ты не робот

Как вы отлаживаете java-аннотации процессоров, используя intellij?

Предпочтительно использовать IDEA IntelliJ. Я попытался установить контрольную точку внутри процессора и запустить, но он не сломался.

4b9b3361

Ответ 1

Если вам действительно нужно отлаживать обработчик аннотации, может быть лучше запустить обработчик аннотации из командной строки, а не в вашу среду IDE с включенной отладкой и подключиться к ней с помощью отладчика IDE.


При запуске javac напрямую вы можете отладить это, указав следующие дополнительные параметры:

javac -J-Xdebug -J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 ... (usual javac parameters go here)

Если вы используете Maven, используйте mvndebug вместо стандартной команды mvn - Maven запускает компилятор в процессе.


При запуске Ant перед запуском добавьте следующее в переменную среды ANT_OPTS:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

При всех этих исполнениях процесс javac, Ant или Maven будет ждать, когда вы присоедините свой отладчик до того, как он начнет выполнение. Инструкции IntelliJ для этого здесь. Для Eclipse здесь.

Ответ 2

Выполните следующие действия. Они работали для меня в студии android для проекта gradle: -

1).In gradle.properties добавить следующие строки

org.gradle.daemon=true
org.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

2).Edit Build COnfiguration и добавьте удаленную конфигурацию введите описание изображения здесь

3). Запустил недавно созданную конфигурацию APT запуска.

4). Добавить точку останова в код обработки аннотации и построить общий проект

Ответ 3

Можно запустить javac и отладить его, как указано выше. Однако в моем случае было утомительно писать полный класс, поэтому я хотел оставить это в IDEA. Поэтому в модуле, где я хотел применить мой обработчик аннотаций, просто создайте класс с основным методом.

public static void main(String[] args) {
    com.sun.tools.javac.Main.main("-proc:only",
        "-processor", "my.pkgs.MyAnnotationProcessor",
        "my/pkgs/any/ClassIWantProcess.java");
}

Для этого вам нужно добавить $JAVA_HOME/lib/tools.jar в JAR SDK (по умолчанию его нет). Это по той же причине, почему для создания JSP-приложений для этих приложений JAR необходим этот JAR в своем пути к классам - им нужен компилятор.

Затем просто установите правильный рабочий каталог для вашей конфигурации запуска (поэтому правильный путь к java файлу верен), установите свою точку прерывания в процессор и отлаживайте по своему желанию!

Benefit - classpath уже установлен IDEA и используется "внутренним" javac, потому что здесь это не отдельный процесс. Я считаю, что это можно перевести и на другие IDE.

Ответ 4

Этот учебник написан для проекта Android. Имя основного модуля "приложение" , как обычно. Проект содержит подмодуль, называемый "аннотация" , который является подзависимостью "app". Модуль "приложение" выполняет обработку аннотации с помощью объявления gradle apt project(':annotation').

ПРОСТОЕ ВЕРСИЯ (выполнить компиляцию с терминала и прикрепить от IDE)

  • [ТРЕБУЕТСЯ] Добавить новую конфигурацию проекта "+" → "Remote". Проверьте Только один экземпляр. Все остальные настройки генерируются автоматически. Оставьте <whole project> как путь к классам. Порт следует оставить по умолчанию 5005.

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

  1. [ТРЕБУЕТСЯ] Убедитесь, что вы остановили все экземпляры gradle, вызвав: ./gradlew --stop
  2. [ТРЕБУЕТСЯ] Запустите команду: ./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac

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

  1. Запустите конфигурацию проекта APT в режиме отладки как можно быстрее:)

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


  1. [СОВЕТ] Мы начинаем с файла EMPTY gradle.properties
  2. [СОВЕТ] НЕ ИСПОЛЬЗУЙТЕ gradle daemon (--no-daemon/org.gradle.daemon = false)
  3. [HINT] Запустите gradle в режиме отладки (опция org.gradle.debug = true)
  4. [HINT] Запустите компиляцию модуля приложения, а не компиляцию модуля процессора (компиляция приложения запускает обработку аннотаций!)
  5. Обычно мы не добавляем никаких параметров компилятора Java в Android Studio (т.е. Файл → другие настройки → Настройки по умолчанию)

РАСШИРЕННАЯ ВЕРСИЯ (используйте gradle.properties)

  • Добавьте следующий файл gradle.properties:
    org.gradle.daemon=false
    org.gradle.debug=true

  1. Запустите компиляцию с терминала:

./gradlew :app:clean :app:compileDebugJavaWithJavac

enter image description here


ДОПОЛНИТЕЛЬНАЯ ВЕРСИЯ (просто нажмите debug в IDE)

  • Добавьте bash script в основной каталог проекта (например, compile.sh)
#!/bin/bash
./gradlew :app:clean :app:compileDebugJavaWithJavac &

Помните о '&' знак для фоновой обработки.

  1. Перейдите к настройкам конфигурации APT, которые мы создали на шаге 1, и добавим конфигурацию Перед запуском. Выберите Запустить внешний инструмент.

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

  1. Добавьте путь к compile.sh script, который мы создали ранее.

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


Внимание

Отказывание gradle компиляции, исключения NullPointer во время компиляции и т.д. иногда приводят к зависанию AndroidStudio (замораживание на стадии обновления gradle). Если вы не можете остановить gradle из IDE, используйте эту команду в терминале:

ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9

Отключение опции отладки во время обновления проекта иногда помогает Android Studio вернуться к правильному пути.

Ответ 6

Обработка аннотации происходит во время компиляции, поэтому обычная отладка не будет работать. Если вы хотите отладить его в контексте вашего проекта, вы можете использовать удаленную отладку IntelliJ, имея Gradle или Maven в режиме отладки. Затем вы можете поместить точки останова в файлы обработчика аннотаций.

См. Отладка обработчика аннотации в любом проекте.

Отказ от ответственности: я написал сообщение.

Ответ 7

Для проекта Maven этот пост, который объясняет следующие шаги немного подробнее, работал у меня:

  • Добавить "Remote" выполнить конфигурацию и установить "порт" на 8000.

  • Выполните команду mvnDebug clean install из каталога проекта (в командной строке).

  • Запустите конфигурацию запуска. Чтобы начать новый сеанс после завершения процессов, повторите с (2).

Не забудьте запустить mvn install в зависимостях проекта при их изменении (например, если обработчик аннотации находится в другом артефакте, чем проект, от которого вы отлаживаете его).