通常、私は次のコマンドで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"
質問:すべての引数で実行するにはどうすればよいですか?
jvmArguments
オプションの使用を開始したため、動作と気付く変更が発生しています。
アプリケーションの実行に使用される分岐プロセスに関連付けられるJVM引数。コマンドラインで、引用符で複数の値を囲むようにしてください。
デフォルトでは、Spring Boot Mavenプラグインを使用すると、 fork
オプションで説明されているように、実行もフォークされます。
実行プロセスをフォークする必要があるかどうかを示すフラグ。デフォルトでは、プロセス分岐は、エージェントまたは
jvmArguments
が指定されている場合にのみ使用されます。
したがって、jvmArguments
を使用すると、プラグイン実行のフォークモードもアクティブになります。フォークすることで、実際に他の人をピックアップしません-D
コマンドラインから渡された引数。
Solution: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 2.0から名前が変更されていることに注意してください。詳細については、以下をご覧ください。
https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/maven-plugin/run-mojo.html
パラメーター名には、spring-boot.
のように-Dspring-boot.run.jvmArgument
をプレフィックスとして付ける必要があります
Spring Boot documentation は、実行中のソリューションとしてSpring Boot 2.0.3
を提供しました
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"