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

Windows 10下使用PowerShell传递含点的自定义Java属性问题

解决Windows PowerShell中传递带点的Java系统属性问题

嗨,我碰到过一模一样的问题!在Windows PowerShell里跑Java Jar包时,带点的自定义系统属性(比如你代码里的test.prop)经常会因为PowerShell的参数解析逻辑,导致Java读不到正确的值。别担心,这俩方法肯定能帮你搞定:

正确的命令写法

方法1:标准无空格格式(最常用)

直接按Java的标准语法传参,注意-D和属性名之间绝对不能加空格,像这样:

java -Dtest.prop=my-custom-value -Dotherprop=another-one -jar YourJarFile.jar

这种写法在绝大多数场景下都能正常工作,PowerShell会正确识别-Dtest.prop=xxx是一个完整的Java系统属性参数。

方法2:引号包裹参数(处理特殊值)

如果你的属性值里包含空格、特殊字符(比如!@#),或者第一种方法还是出问题,就把整个-D参数用双引号包起来:

java "-Dtest.prop=My Value With Spaces" "-Dotherprop=value!@#" -jar YourJarFile.jar

这样能彻底避免PowerShell对参数的误解析。

为啥会踩坑?

最常见的错误就是在-D后面加了空格,比如写成-D test.prop=value——这时候PowerShell会把-D当成一个独立参数,test.prop=value当成Jar包的启动参数,而不是Java的系统属性,你的代码自然就读到默认的missing了。

验证你的代码

用正确命令跑一遍试试,比如:

java -Dtest.prop=hello-world -Dotherprop=foo-bar -jar Test.jar

你的代码应该会输出:

test.prop: hello-world
otherprop: foo-bar
cmd: -Dtest.prop=hello-world -Dotherprop=foo-bar -jar Test.jar

完全符合预期!

额外排查小技巧

要是还不确定属性有没有传对,可以在代码里加一段打印所有系统属性的代码,一目了然:

// 打印所有系统属性,方便排查
System.getProperties().forEach((key, value) -> System.out.printf("%s: %s%n", key, value));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:16