Как отладить приложение spring -boot с сообществом сообщества IntelliJ IDEA?

У меня возникли трудности с отладкой приложения Java spring -boot в сообществе сообщества IntelliJ IDEA. Основная проблема заключается в том, что среда IDE не останавливается на контрольной точке, даже программа, безусловно, выполняет ее. Как я могу заставить IntelliJ IDEA остановиться в точке останова?

В качестве дополнительной информации, вот мои конфигурации запуска:

Конфигурация Maven с командой: spring -boot: run. Перед запуском я создаю проект.

Ответ 1

Единственный способ, которым я работал, - создать отдельную удаленную конфигурацию отладки.

Итак, перейдите в edit configuration → Remote → +. Затем запустите приложение обычно через intelliJ. Затем переключитесь на вновь созданную удаленную конфигурацию. Вместо того, чтобы запускать его, нажмите debug. Теперь отладчик должен быть готов, и вы можете установить контрольные точки, и отладчик остановится на них.

Ответ 2

Для меня эти шаги работают:

  1. Выберите меню Run → Edit Configurations...
  2. Создать новую удаленную конфигурацию. По умолчанию вам не нужно менять настройки:
    -agentlib: JDWP = транспорт = транспорт по сокетам, сервер = у, приостановить = п, адрес = 5005. Но если вы хотите, например, приостановить JVM перед подключением, вы можете изменить suspend = y. Или вы можете изменить порт и т.д.
  3. Скопируйте командную строку в зависимости от версии JVM и сохраните конфигурацию.
  4. В окне терминала запустите ваше приложение с (в случае использования Maven и JVM 1.5 и выше) mvn clean spring-boot: run -Drun.jvmArguments = "-agentlib: jdwp = transport = dt_socket, server = y, suspend = n, адрес = 5005"
  5. Подключитесь к своему приложению, запустив удаленную конфигурацию, созданную ранее на шаге 2. Теперь вы можете отлаживать свое приложение.

Ответ 3

Единственный подход, который работал у меня, - это запуск или отладка приложения непосредственно из Intellij Idea. Просто откройте класс, содержащий

 public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

И нажмите правую кнопку мыши- > Отладка моего приложения

Ответ 4

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

spring-boot:run -Dspring-boot.run.fork=false

Объяснение:

При запуске приложения в режиме отладки отладчик IntelliJ подключается к процессу Java, который он запускает сам (добавляя соответствующие параметры, -agentlib:jdwp и т.д., В командную строку Java).

Довольно часто эти Java-процессы могут затем разветвлять новый экземпляр, который не получает те же параметры и, поскольку он находится в отдельном процессе, не подключен к отладчику. Это может сбивать с толку.

Цель spring-boot:run Maven, в дополнение к разветвлению новой JVM, создает еще большую путаницу, потому что она иногда делает форк, а иногда нет, в зависимости от опций, которые он получает, среди прочего. Часть этого можно найти в документации, но это не всегда очевидно.

Сначала вы должны проверить, действительно ли Java-процесс вообще отлаживается. Когда вы запустите приложение из IntelliJ, вы увидите прокрутку сообщений на вкладке Run/Debug. Вверху есть командная строка, которая выполняется. Он должен содержать параметры отладчика (-agentlib:jdwp и т.д.), После чего должно появиться сообщение "Подключено к целевой ВМ", которое является отладчиком, подтверждающим, что у него есть контакт.

Далее, если вы не уверены, что JVM разветвлена, вы можете проверить список процессов в вашей ОС, например, в MacOS и * nix, вы можете использовать ps aux | grep java. Процессы Java обычно имеют гигантский список параметров, большинство из которых - это путь классов. Фактически запускаемое приложение находится в самом конце командной строки. Если JVM была разветвлена, у вас есть процесс, выполняющий цель Maven, и еще один, выполняющий приложение Spring. Тогда ваш отладчик будет подключен к процессу, который вас не интересует, и ваши контрольные точки не будут работать.

Чтобы остановить spring-boot:run от разветвления, вы можете использовать параметр fork выше.

Ответ 5

Я обнаружил, что включение Spring Dev Tools в мою сборку приводило к сбою отладки IntelliJ (согласно вашему описанию выше). Если вы не используете эту функцию, просто удалите ее из сборки.

При использовании Maven, строки ниже должны быть удалены из вас pom.xml.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
    </dependency>

Ответ 6

piphonom anwser хорош, но вам нужно сделать немного больше, что добавляет jvmArguments к плагину maven, как этот

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
        </jvmArguments>
    </configuration>
</plugin>

для получения дополнительной информации о удаленном debuge для проекта загрузки spring, прочитайте this

Ответ 7

К сожалению, все предыдущие ответы неполные. Я потратил много времени, чтобы найти правильный способ удаленной отладки в IntelliJ, и вот полное объяснение.

Мы предполагаем, что код проекта находится на вашем локальном компьютере (ОС Windows), и у вас есть развертывание проекта на виртуальной машине Ubuntu на вашем сервере (или на вашей рабочей станции VMWare). и эти две машины находятся в одной сети (они могут пинговать друг друга)

Прежде всего, добавьте новую конфигурацию Run/Debug, используя меню Run> Edit Configuration, а затем нажмите кнопку + в левом верхнем углу и выберите опцию "Remote". Сохраните параметры конфигурации как есть и просто определите имя для вашей новой конфигурации.

Во-вторых, откройте замазку и подключитесь к удаленному серверу по SSH. Запустите команду ниже, чтобы добавить функцию удаленной отладки в ваш проект в терминале замазки:

export JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"

Теперь перейдите в корневой каталог вашего проекта на удаленном сервере (в том же сеансе замазки) и запустите его, используя команду, которую вы обычно используете для этого (например, моя следующая):

mvn -U clean spring-boot:run

Здесь идет самая важная часть, которой все пренебрегали здесь :)

Щелкните правой кнопкой мыши в верхней части окна сеанса замазки и выберите "Изменить настройки...". Перейдите к пути Connection> SSH> Tunnels в левой части дерева настроек. Теперь добавьте две записи переадресации портов, например, следующую картинку (одна локальная, которая перенаправляет порт localhost 5005 на IP-адрес вашего удаленного сервера с тем же номером порта, и одна удаленная, которая перенаправляет удаленный порт 5005 на порт 5005 на машине localhost)

enter image description here

Наконец, вернитесь к IntelliJ и в меню "Выполнить" выберите ранее добавленную конфигурацию, а затем нажмите кнопку "Отладка". Ваш локальный IntelliJ IDEA должен быть подключен к удаленному развертыванию вашего проекта, готов к отладке !!

enter image description here

Ответ 8

на InteliJ Перейти к run-> редактировать конфигурацию → нажать "+" → выбрать "Приложение"

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

Ответ 9

  1. включите порт отладки в вашем приложении pom.XML, например:

    <Плагин> <Идентификатор_группы> org.springframework.boot </идентификатор_группы> <Конфигурация> <JvmArguments> -Xdebug -Xrunjdwp: transport = dt_socket, server = y, suspend = y, address = 5005 </JvmArguments> </Конфигурация> </Плагин>

  1. следуйте предложению Ville Miekk-oja

    Итак, перейдите к редактированию configurations-> Remote ->+. Затем нормально запустите ваше приложение через intelliJ. Затем переключитесь на вновь созданную удаленную конфигурацию. Вместо запуска нажмите отладку. Теперь отладчик должен быть готов, и вы можете установить точки останова, и отладчик остановится на них.

Ответ 10

Я столкнулся с подобной проблемой: src/main/webapp не может быть включен в проект, это делает отладку в основном классе бесполезной. Поэтому я пытаюсь найти способ отладки mvn spring-boot: запустить на Intellij.

Затем я нашел видео на YouTube, в котором показан метод использования плагина maven Intellij для отладки. Это просто и решить вопрос.