You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java命令行无法获取-D属性参数问题求助

问题解决:系统属性参数位置放错啦!

兄弟,我太懂你折腾两小时找不到问题的憋屈感了!其实问题根源特别简单——你把-D系统属性参数放错位置了,这是Java启动命令里一个超级容易踩的坑。

为什么原来的命令不行?

Java的-Dxxx=xxx这种系统属性参数,必须放在-jar选项之前!如果把它放在jar文件名后面,JVM会把它当成你的应用程序自己的命令行参数,而不是JVM层面的系统属性。

你之前执行的命令:

java -jar target/gs-rest-service-0.1.0.jar -Dhello=hello

这里的-Dhello=hello是传给你的jar应用的自定义参数,不是给JVM的,所以System.getProperty()自然拿不到它。你看到sun.java.command里有完整命令,也侧面证明了这一点——JVM把整个后面的内容都当成了应用的启动参数串。

正确的命令写法

把-D参数移到-jar前面就行:

java -Dhello=hello -jar target/gs-rest-service-0.1.0.jar

正确的属性获取方式

改完命令后,用下面两种方式都能正常拿到值:

System.getProperty("hello"); // 推荐写法,简洁直接
System.getProperties().getProperty("hello"); // 也可以正常工作

另外两种带-D前缀的写法本来就不对,因为-D只是JVM的参数标记,实际存入系统属性的键名就是hello,不是-Dhello。

补充:如果需要应用自定义参数

如果你确实想把参数传给应用本身(而非JVM系统属性),可以把它放在jar后面,然后通过main方法的String[] args参数来读取,比如:

public static void main(String[] args) {
    // args数组里就会包含"-Dhello=hello"这个元素(或者你可以改成不带-D的格式,比如"hello=hello")
}

内容的提问来源于stack exchange,提问作者Mr Bonjour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:40:08