Maven Spring Boot Run отладка с аргументами
Обычно я запускаю приложение Spring Boot с помощью команды:
mvn spring-boot:run -Drun.arguments=--server.port=9090 \
-Dpath.to.config.dir=/var/data/my/config/dir
Я хочу настроить пользовательский порт для отладки, чтобы я мог подключиться из затмения. Когда я добавляю аргументы из примера 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"
Вопрос: Как я могу работать со всеми аргументами?
6 ответов
Поведение и изменения, которые вы заметили, происходят потому, что вы начали использовать jvmArguments
опция:
Аргументы JVM, которые должны быть связаны с разветвленным процессом, используемым для запуска приложения. В командной строке не забудьте заключить несколько значений в кавычки.
По умолчанию при его использовании плагин Spring Boot Maven также прервет выполнение, как описано в fork
опция:
Флаг, указывающий, следует ли разветвлять запущенные процессы. По умолчанию процесс разветвления используется только в том случае, если агент или
jvmArguments
указаны.
Следовательно, использование jvmArguments
также активирован режим форка исполнения плагина. Разветвляясь, вы на самом деле не подбираете других -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"
Имя параметра должно начинаться с префикса 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"
Обратите внимание, что из 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
Переопределите свойства spring-boot из командной строки Maven с помощью Powershell:
- Весенняя загрузка 2.4.4
- Maven 3.6.3
- Powershell Windows 10
Это сработало для меня:
mvn spring-boot:run -D"spring-boot.run.jvmArguments"="-Dimport.dataset.list=importpb"
Есть еще одна проблема. Если pom.xml определяет jvmArguments, аргументы командной строки игнорируются.
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Xmx2048m -XX:NativeMemoryTracking=summary --enable-preview</jvmArguments>
</configuration>
</plugin>
Если я хочу добавить свойства отладки в одну из пусковых установок
-Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8282"
Это не сработает.
Следуя документации redhat ..
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$PORT_NUMBER"