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?
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"
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
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"