У меня есть приложение Java Spring, которое можно запустить с помощью
./mvnw spring-boot:run
Я хочу отладить это приложение, поэтому пытаюсь запустить его с флагами
./mvnw spring-boot:run -Dspring-boot.run.jvmArguments = "-XDebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
И получите ошибку:
Unrecognized option: -XDebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
Но когда я пытаюсь запустить одно и то же приложение с флагами «XDebug» и «Xrunjdwp» отдельно:
./mvnw spring-boot:run -Dspring-boot.run.jvmArguments = "-XDebug"
./mvnw spring-boot:run -Dspring-boot.run.jvmArguments = "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
Запускается без ошибок.
Почему я получаю сообщение об ошибке при попытке использовать оба флага одновременно? Я предполагаю, что по какой-то причине Java рассматривает «-XDebug -Xrunjdwp» как один флаг, но я не понимаю, в чем причина этого.
-XDebug и -Xrunjdw — это старые параметры отладки, которые были заменены со времен Java 6. Если вы не используете Java 5 с 2006 года, вам следует использовать современные аргументы отладки: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
.
Спасибо, замена двух флагов на один
-agentlib:jdwp
помогла, поэтому я отметил ваш ответ как правильный. Но, честно говоря, это всего лишь обходной путь, а не решение проблемы с аргументами. Почему Spring работает нормально, если я предоставляю аргументы один за другим, но происходит сбой, когда я предоставляю два аргумента? Что, если в будущем мне понадобится предоставить два аргумента по причинам, отличным от отладки?