如何阻止我的命令行参数在 Maven 插件中被转义?

Posted

技术标签:

【中文标题】如何阻止我的命令行参数在 Maven 插件中被转义?【英文标题】:How do I stop my command-line arguments being escaped in a maven plugin? 【发布时间】:2010-11-18 06:54:46 【问题描述】:

我有一个插件,它使用 Plexus 命令行来调用一些外部进程并捕获输出。其中一个参数是带有空格和引号的有趣格式,例如--范围:“2008 年 8 月 25 日”-“2009 年 8 月 4 日”。我无法更改参数的所需格式,但 Plexus 检测到参数中的空格并将整个内容用引号括起来。

所以

call --range:"25 Aug 2008"-"04 Aug 2009"

变成

call "--range:"25 Aug 2008"-"04 Aug 2009""

调用失败。

我可以让 plexus 停止转义参数吗?

【问题讨论】:

【参考方案1】:

Commandline 对象使用 Shell 与本地环境交互,您可以配置 Shell 以覆盖默认转义过程以不转义任何引号:

Commandline cl = new Commandline("call");
commandline.getShell().setQuotedArgumentsEnabled(false);

请注意,这意味着没有个参数将被引用,因此请谨慎使用!

【讨论】:

以上是关于如何阻止我的命令行参数在 Maven 插件中被转义?的主要内容,如果未能解决你的问题,请参考以下文章

如何在intellij中为maven命令行项目添加程序参数?

为maven插件设置参数的三种方法

在 Maven 2 的命令行中设置插件的版本

如何转义任意字符串以用作 Bash 中的命令行参数?

如何从命令行禁用 Maven Javadoc 插件?

如何转义变量中的特殊字符以在 bash 中提供命令行参数