Maven spring отладка загрузки с аргументами
Обычно я запускаю приложение Spring Boot с командой:
mvn spring-boot:run -Drun.arguments=--server.port=9090 \
-Dpath.to.config.dir=/var/data/my/config/dir
Я хочу настроить собственный порт для отладки, поэтому я могу подключиться из eclipse. Когда я добавляю аргументы из примера http://docs.spring.io/spring-boot/docs/1.1.2.BUILD-SNAPSHOT/maven-plugin/examples/run-debug.html
mvn spring-boot:run -Drun.arguments=--server.port=9090 \
-Dpath.to.config.dir=/var/data/my/config/dir \
-Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8787"
он работает, но другие аргументы, такие как server.port
или path.to.config.dir
, больше не распознаются, и я получаю исключение, например:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed
to parse configuration class [com.my.app.Controller]; nested exception
is java.lang.IllegalArgumentException: Could not resolve placeholder
'path.to.config.dir' in string value
file:///${path.to.config.dir}/some.properties"
Вопрос: Как я могу работать со всеми аргументами?
Ответы
Ответ 1
Поведение и изменение, которое вы заметили, происходит, потому что вы начали использовать параметр jvmArguments
:
JVM, которые должны быть связаны с разветвленным процессом, используемым для запуска приложения. В командной строке обязательно оберните несколько значений между кавычками.
По умолчанию при его использовании плагин Spring Boot Maven также может разблокировать его выполнение, как описано в опции fork
:
Флаг, чтобы указать, должны ли процессы прогона быть раздвоены. По умолчанию процесс forking используется только в том случае, если указан агент или jvmArguments
.
Следовательно, использование jvmArguments
также активировало режим fork для выполнения плагина. При форкировании вы фактически не собираете другие -D
аргументы, переданные из командной строки.
Решение: если вы хотите использовать jvmArguments
, тогда передайте ему все необходимые аргументы.
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8787 -Dserver.port=9090 -Dpath.to.config.dir=/var/data/my/config/dir"
Ответ 2
Обратите внимание, что из Spring-Boot 2.0 имена изменены. Для получения дополнительной информации проверьте:
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/maven-plugin/run-mojo.html
- run.jvmArguments → spring-boot.run.jvmArguments
- run.arguments → spring-boot.run.arguments
Ответ 3
Имя параметра должно иметь префикс с spring-boot.
как в -Dspring-boot.run.jvmArgument
Документация Spring Boot предоставила мне решение, поскольку я запускаю Spring Boot 2.0.3
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"