如何在PowerShell中转义Maven参数字符串里的竖线
解决PowerShell中Maven命令竖线被解析为管道符的问题
最佳方案:使用停止解析标记--%
在PowerShell 5.1中,--%是专门的停止解析标记,它会让PowerShell停止处理后续内容中的特殊字符(包括管道符|),直接将内容原样传递给外部程序。执行以下命令即可正常运行:
mvn --% -Dhttp.nonProxyHosts=xxx.xxx.*|*.example.com|*.example2.com|localhost|127.0.0.1 -DskipTests clean install
如果习惯保留单引号包裹规则,也可以这样写(--%后的单引号会被原样传递,Maven能正确解析):
mvn --% -Dhttp.nonProxyHosts='xxx.xxx.*|*.example.com|*.example2.com|localhost|127.0.0.1' -DskipTests clean install
为什么之前的方法无效?
- 转义字符不适用:PowerShell的反引号
、反斜杠`等转义符,仅对PowerShell自身的语法解析生效,无法直接控制外部程序(Maven)的参数接收逻辑,因此无法阻止|被误解析。 - 双引号包裹的问题:你之前尝试的双引号包裹方式,要么因为内部单引号被Maven当成参数的一部分导致规则解析错误,要么PowerShell 5.1对双引号内特殊字符的预处理逻辑仍会触发管道符解析。
替代方案:嵌套双引号传递参数
如果不想使用--%,可以去掉参数内部的单引号,直接用双引号包裹整个-Dhttp.nonProxyHosts参数,让PowerShell将其作为整体传递:
mvn "-Dhttp.nonProxyHosts=xxx.xxx.*|*.example.com|*.example2.com|localhost|127.0.0.1" -DskipTests clean install
内容的提问来源于stack exchange,提问作者CloudWatcher
相关产品推荐
相关产品推荐

