Як налагодити додаток Spring Boot за допомогою Eclipse?


100

Мій Spring Bootwebbapp працює чудово, і я хотів би налагодити його через Eclipse.

Тож при запуску мого налагоджувача віддаленої програми Java, який порт я повинен слухати? І чи є на моєму веб-сайті налаштування, яке я повинен встановити, щоб включити налагодження?


У STS 3.9.4.RELEASE на Linux Mint 18 Sarah Я маю піти в перспективу налагодження для налагодження програм Spring Boot.
TimeTrap

Відповіді:


167

Чому ви просто не клацніть правою кнопкою миші на main()метод і не виберете "Debug As... Java Application"?


Не думав про це. Я тестую додаток для відпочинку. Запустіть його, а потім натисніть на його браузер з різними конфігураціями.
JeffLL

8
Бувають випадки, коли може знадобитися налагоджувати програму, що працює віддалено на сервері, і це не застосовується.
Куга

Це не працювало для мене. "Редактор не містить основного типу"
Raj

Я думаю, ви тоді не "клацнули правою кнопкою миші на методі main ()"?
Дейв Сайер

4
Моя ситуація була, але різниться, Running Main безпосередньо не збирав декілька файлів конфігурації весни, тобто bootstrap.xml, тоді мені довелося перейти на запуск її як Maven spring-boot: run. Але проблема з цим полягає в тому, що навіть якщо ви запускаєте цю головну мету від затемнення, вона не зможе її налагодити.
sanjay patel

91

У довіднику Spring Boot є розділ 19.2, який розповідає про запуск програми із підтримкою віддаленої налагодження.

$ java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n \
   -jar target/myproject-0.0.1-SNAPSHOT.jar

Після запуску програми просто додайте конфігурацію віддаленої програми Java у конфігураціях Run / Debug, виберіть порт / адресу, яку ви визначили під час запуску програми, і тоді ви зможете налагоджувати.


Це працювало для мене. Дякую! Eclipse не зміг налагодити проект весняного завантаження (Kept скаржився, що класу Main не вдалося знайти).
користувач6123723

4
Зауважте, що в Java 8 (я не знаю про інші версії) працює java -agentlib:jdwp=helpстан "Старіший -Xrunjdwp інтерфейс все ще можна використовувати, але він буде видалений у майбутньому випуску". Замість використання-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n
Пол

23

Простіше рішення:

Замість введення тексту mvn spring-boot:runпросто введітьmvnDebug spring-boot:run

Вам все одно потрібно буде приєднати налагоджувач у Eclipse, створивши нову конфігурацію налагодження для "Віддаленої програми Java" на відповідному порту.


3
Як ви б тоді вказали номер порту, відмінний від типового?
Стефан

19

Мені не потрібно було встановлювати віддалену налагодження для того, щоб це працювало, я використовував Maven.

  1. Переконайтеся, що у вас встановлено плагін Maven в Eclipse.
  2. Клацніть Виконати> Запустити конфігурації> Maven Build> нова конфігурація запуску :
    • Базова директорія: перейдіть до кореня проекту
    • Цілі: spring-boot::run.
  3. Клацніть Застосувати, потім натисніть кнопку Виконати .

NB. Якщо у вашого IDE виникають проблеми з пошуком вихідного коду вашого проекту під час налагодження по рядках, перегляньте цю відповідь ТА, щоб дізнатися, як вручну приєднати вихідний код до програми налагодження.

Сподіваюся, це комусь допоможе!


Якщо ви запустите сервер з Spring-boot: run, ви не зможете зупинити його, просто натиснувши на червоний значок у вікні консолі.
Шайлеш Пратапвар

Я можу зупинити це так (може знадобитися вбудований netstat, я забуду, чи я побідав бінарним чи прийшов із Cygwin, або частиною Windows зараз): netstat -ano | grep "9999" --returns 36308 id завдань у Windows taskkill / F / PID 36308
armyofda12mnkeys

19

Як налагодити віддалену постановку або виробництво програми Spring Boot

На стороні сервера

Припустимо, ви успішно виконували посібник Spring Boot щодо налаштування програми Spring Boot як сервісу . Артефакт вашої програми розташований у /srv/my-app/my-app.warсупроводі файлу конфігурації /srv/my-app/my-app.conf:

# This is file my-app.conf
# What can you do in this .conf file? The my-app.war is prepended with a SysV init.d script
# (yes, take a look into the war file with a text editor). As my-app.war is symlinked in the init.d directory, that init.d script
# gets executed. One of its step is actually `source`ing this .conf file. Therefore we can do anything in this .conf file that
# we can also do in a regular shell script.

JAVA_OPTS="-agentlib:jdwp=transport=dt_socket,address=localhost:8002,server=y,suspend=n"
export SPRING_PROFILES_ACTIVE=staging

Після перезапуску програми Spring Boot sudo service my-app restartу файлі журналу, розташованому на, /var/log/my-app.logмає бути рядок Listening for transport dt_socket at address: 8002.

Сторона клієнта (машина розробника)

Відкриття SSH переадресації портів тунель до сервера: ssh -L 8002:localhost:8002 myusername@staging.example.com. Тримайте цей сеанс SSH.

У програмі Eclipse на панелі інструментів виберіть Запуск -> Конфігурації налагодження -> виберіть Віддалену програму Java -> натисніть кнопку Створити -> виберіть як тип з'єднання Стандартний (Socket Attach) , як Host localhost , і як порт 8002 (або як у вас є налаштований на попередніх етапах). Клацніть Застосувати, а потім налагодити .

Тепер відладчик Eclipse повинен підключитися до віддаленого сервера. Перехід на перспективу налагодження повинен показувати підключений JVM та його потоки. Точки переривання повинні спрацьовувати, як тільки вони віддалено спрацьовують.


Переадресація порту та тунелювання - це біт, який мені не вистачало. Та. Найважливіше, якщо ви налагоджуєте веб-сервер, скажімо, на Amazon.
PaulNUK

14

Виконайте команду нижче, де pom.xmlрозміщено:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"

І запустіть віддалену програму Java з можливістю налагодження на порту5005


2
Це не в змозі чекати налагодження налагодження Spring Boot 2.0.3.RELEASE.
Стефан

10

Найкраще рішення, на мою думку, - додати плагін у pom.xml, і вам не потрібно робити нічого іншого весь час:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>
                        -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9898
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Але тоді команда mvn clean installзапускає налагоджувач і збірка зависає. Було б здорово, якби тільки mvnDebug clean installкоманда зробила це.
Стефан

1
@Stephane, ця конфігурація, ймовірно, повинна бути легко
включена

4
  • клацніть правою кнопкою миші на вашому проекті та виберіть "Налагодження як => програма Java або додаток Spring boot" -capture1 - введіть тут опис зображення
  • Якщо ви хочете, щоб ваша програма призупинила десь у вашому додатку, двічі клацніть ліворуч, вам сподобається це захоплення 2. введіть тут опис зображення
  • тоді, коли ви запускаєте додаток, використовуйте ці стрілки, щоб перейти далі. (захоплення 3) введіть тут опис зображення

Це гарна відповідь на заголовкове запитання. Однак в описі є більш визначене та інше питання, на яке потрібна інша відповідь.
Тор Ховден

Тому я використовував MyEclispe і налагодження програми «Spring Boot» - був доступний і працював чудово. Я не використовую Eclipse Oxygen, і пункт меню Spring Boot App більше не доступний. Чи потрібно мені встановити плагін для eclipse, щоб отримати це?
Kachopsticks

3

Right click on the spring boot project -> debug as -> spring boot App. Поставте точку налагодження та викликайте додаток від такого клієнта, як листоноша


2

Дивіться http://java.dzone.com/articles/how-debug-remote-java-applicat, щоб увімкнути віддалену налагодження. Якщо ви використовуєте tomcat для запуску програми, запустіть tomcat з віддаленими параметрами налагодження або ви можете запустити tomcat з підтримкою JPDA, використовуючи наступну команду.

Windows

<tomcat bin dir>/startup.bat jpda

* нікс

<tomcat bin dir>/startup.sh jpda

це дозволить віддалену налагодження на порту 8000


2

З затемненням або будь-яким іншим IDE, просто клацніть правою кнопкою миші на вашій головній програмі весняного завантаження та натисніть "налагодження як програма java"


2

На це питання вже відповіли, але я також отримав те саме питання, щоб налагодити Springboot + gradle + jHipster,

Здебільшого Spring завантажувальний додаток може налагоджувати клацанням правою кнопкою миші та налагодженням, але коли ви використовуєте gradle, маючи деякі додаткові параметри середовища, тоді неможливо налагоджувати безпосередньо.

Щоб вирішити це питання, Eclipse надав ще одну додаткову функцію як віддалений Java-додаток

використовуючи ці функції, ви можете налагоджувати свою програму.

Виконайте крок нижче:

запустіть свою програму gradle ./gradlew bootRun --debug-jvmкомандою

Тепер перейдіть до затемнення -> проект правою кнопкою миші та конфігурація налагодження -> Віддалена програма Java.

додайте хост і порт як localhost та порт як 5005 (за замовчуванням для налагодження gradle, ви можете змінити його)

Див більш докладно і крок.


0

Клацніть правою кнопкою миші файл основного класу Spring Boot Applications -> виберіть Налагодження як параметри -> Виберіть Java Application

введіть тут опис зображення Тепер ви можете використовувати точки відключення для налагодження програми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.