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"

Ответ 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"