传递到 mvn exec:java 时保留参数间距等

Posted

技术标签:

【中文标题】传递到 mvn exec:java 时保留参数间距等【英文标题】:Preserving argument spacing, etc when passing into mvn exec:java 【发布时间】:2011-04-03 23:28:51 【问题描述】:

我有一个启动 Maven exec:java 进程的 shell 脚本 -

exec mvn exec:java -Dexec.mainClass=... -Dexec.args="$*"

现在很遗憾如果我跑了

./myMagicShellScript arg1 "arg 2"

单个字符串 arg 2 并没有像我想要的那样作为单个参数通过。

关于如何正确逃脱/通过事物的任何想法(最好以干净的方式)?

【问题讨论】:

我分担你的痛苦。这么多级别的转义和标记化。 【参考方案1】:

我查看了mvn script 并做了一些测试。这是我想出的:

尝试将脚本更改为如下所示:

args=($@// /\\ )
exec mvn exec:java -Dexec.mainClass=... -Dexec.args="$args[*]"

这会将每个数组元素中的所有空格都用反斜杠转义。

【讨论】:

当我这样做时,Maven 会尝试解释命令行的其余部分,而不是将其作为 exec.args 传递:( 如果你传递明确的参数它会做什么:...-Dexec.args="arg1 'arg 2'"?值中是否包含单引号?如果是这样,那是可取的吗? ...-Dexec.args="arg1 arg\ 2"呢? 哇,这太糟糕了。 a 'b c' -> "a", "'b", "c'"。 a b\ c 似乎可以工作。 @Steven: mvn 是脚本还是二进制文件? 这是一个执行这种奇怪魔法的 shell 脚本:QUOTED_ARGS="" while [ "$1" != "" ] ;做 QUOTED_ARGS="$QUOTED_ARGS \"$1\"" 班次完成

以上是关于传递到 mvn exec:java 时保留参数间距等的主要内容,如果未能解决你的问题,请参考以下文章

php向js的函数内传递参数-用经纬度计算2点间距离

spring 笔记1: mvn 中Controller方法的参数不能是嵌套类(内部类)。

maven中运行java程序

在URL里传递参数时,遇到#号被截断,怎样处理?

通过 Angular 模板传递回调函数时保留此上下文

复制/粘贴到 Word 时如何保留 rstudio 的格式?