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
相关产品推荐
相关产品推荐

