web-dev-qa-db-fra.com

Maven Spring Boot lance le débogage avec des arguments

Habituellement, j'exécute mon application Spring Boot avec la commande:

mvn spring-boot:run -Drun.arguments=--server.port=9090 \
   -Dpath.to.config.dir=/var/data/my/config/dir

Je veux définir un port personnalisé pour le débogage afin de pouvoir me connecter à partir d'Eclipse. Quand j'ajoute des arguments de l'exemple 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"

cela fonctionne mais d'autres arguments comme server.port ou path.to.config.dir ne sont plus reconnus et j'obtiens une exception comme:

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"

Question : Comment puis-je exécuter avec tous les arguments?

29
wbk

Le comportement et le changement que vous remarquez se produisent parce que vous avez commencé à utiliser l'option jvmArguments :

Les arguments JVM à associer au processus forké utilisé pour exécuter l'application. En ligne de commande, assurez-vous de placer plusieurs valeurs entre guillemets.

Par défaut, lors de son utilisation, le plug-in Spring Boot Maven se chargera également de l'exécution, comme décrit par l'option fork :

Indicateur signalant si les processus d’exécution doivent être créés. Par défaut, le forking de processus n'est utilisé que si un agent ou jvmArguments est spécifié.

Par conséquent, l'utilisation de jvmArguments a également activé le mode fork de l'exécution du plug-in. En recopiant, vous ne capturez pas les autres -D arguments passés en ligne de commande.

Solution : si vous souhaitez utiliser le jvmArguments, transmettez-lui tous les arguments requis.

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"
31
A_Di-Matteo

Notez que depuis Spring-Boot 2.0, les noms ont changé. Pour plus de détails, consultez:

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
15
jalogar

Le nom du paramètre doit être précédé de spring-boot. Comme dans -Dspring-boot.run.jvmArgument

Le documentation Spring Boot m'a fourni la solution en cours d'exécution Spring Boot 2.0.3

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
15
Stephane