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"
Другие вопросы по тегам