Как вы отлаживаете Java-процессоры аннотаций, используя intellij? - PullRequest
37 голосов
/ 21 декабря 2011

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

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

Ответы [ 8 ]

32 голосов
/ 11 апреля 2013

Если вам действительно нужно отлаживать процессор аннотаций, может быть лучше запустить процессор аннотаций из командной строки, а не из среды 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 здесь .

14 голосов
/ 21 апреля 2016

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

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

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

2). Редактировать сборку конфигурациии добавьте удаленную настройку enter image description here

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

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

10 голосов
/ 27 февраля 2017

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

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

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

enter image description here

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

enter image description here

Как можно быстрее запустите настройку проекта APT в режиме отладки:)

enter image description here


[СОВЕТ] Мы начинаем с ПУСТОГО gradle.properties file [HINT] НЕ ИСПОЛЬЗУЙТЕ gradle daemon (--no-daemon / org.gradle.daemon = ложная опция) [СОВЕТ] Запустите gradle в режиме отладка (org.gradle.debug = истинная опция) [СОВЕТ] Выполнить Компиляция модуля приложения не компиляция модуля процессора (компиляция приложения запускает обработку аннотаций!) Обычно мы НЕ добавляем какие-либо настройки компилятора Java в Android Studio (т. е. Файл -> другие настройки -> Настройки по умолчанию)

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

  1. Добавьте следующее в ваш gradle.свойства файл:

    org.gradle.daemon=false
    org.gradle.debug=true

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

./gradlew :app:clean :app:compileDebugJavaWithJavac

enter image description here


ADVANCED VERSION (просто нажмите debug в IDE)

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

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

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

enter image description here

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

enter image description here


Предупреждение

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

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

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

7 голосов
/ 30 июля 2015

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

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 на их пути к классам - им нужен компилятор.

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

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

3 голосов
/ 29 марта 2016

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

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

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

3 голосов
/ 22 декабря 2011

Я нашел следующий ресурс, который может вам помочь: http://code.google.com/p/acris/wiki/AnnotationProcessing_DebuggingEclipse

Парень объясняет шаг за шагом, как отлаживать процессоры аннотаций с помощью Eclipse.

1 голос
/ 25 октября 2016

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

  1. Добавить "Удаленную" конфигурацию запуска и установить "порт" на 8000.

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

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

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

0 голосов
/ 05 сентября 2018

Отладка процессора аннотаций с помощью IntelliJ IDEA и Gradle

  1. Установка пользовательской опции виртуальной машины -Dcompiler.process.debug.port=5005: нажмите Ctrl + Shift + A и выберите Изменить пользовательские параметры виртуальной машины ... в списке действий для добавления пользовательской опции виртуальной машины затем перезапустите IDE.
  2. Создание конфигурации удаленной отладки с параметрами по умолчанию: Выполнить -> Редактировать конфигурации ... -> Добавить новую конфигурацию (Alt + Insert) -> Удаленная . enter image description here
  3. Установить контрольные точки.
  4. Сборка с Gradle из терминала: $ ./gradlew --no-daemon -Dorg.gradle.debug=true clean build (нормально, если выполнение команды заморожено, не прерывайте процесс).
  5. Отладка конфигурации удаленной отладки в среде IDE (см. Шаг 3): выберите подходящую конфигурацию удаленной отладки и нажмите Shift + F9 . enter image description here

Надеюсь, это кому-нибудь поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...