如何在Maven命令行中为Spring Boot应用正确传递VM选项参数
核心原因
mvn -Djasypt.encryptor.password=xx spring-boot:run 传参失效的本质是:Maven命令行直接附加的-D参数,只会传递给Maven自身的运行进程,不会自动透传给spring-boot:run插件启动的Spring Boot应用子进程。
你之前在IDEA启动配置中写的VM参数,是直接附加给Spring Boot应用主进程的,因此能被@Value正常读取。
正确传参方式
使用Spring Boot Maven插件专用的spring-boot.run.jvmArguments参数传递JVM系统属性,命令写法如下:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Djasypt.encryptor.password=xxx"
该参数会被插件直接注入到启动的应用Java进程中,和IDEA中配置VM选项的效果完全一致,@Value可以正常读取占位符。
传参场景澄清
VM选项(包括-D开头的JVM系统属性、-X开头的JVM调优参数等)并非只能在java -jar命令中附加,常见合法传参场景包括:
- 直接启动可执行Jar包:
java -Djasypt.encryptor.password=xxx -jar your-app.jar - IDE类工具启动:在启动配置的「VM Options」栏填写参数
- Maven执行
spring-boot:run:通过上述jvmArguments参数传递
避坑提醒:不要混淆两个Spring Boot Maven插件的传参参数
spring-boot.run.jvmArguments:传递JVM层面参数(如系统属性、堆内存配置)spring-boot.run.arguments:传递Spring Boot应用级启动参数(如--server.port=8081)
内容的提问来源于stack exchange,提问作者maciejka
相关产品推荐
相关产品推荐

