我正在使用maven插件appassembler生成一个unix脚本。在它的标签中,我说得像:
<commandLineArguments>
<commandLineArgument>$1</commandLineArgument>
<commandLineArgument>$2</commandLineArgument>
<commandLineArgument>$3</commandLineArgument>
</commandLineArguments>
然而,结果脚本显示 $ 1 $ 2 $ 3“$ @”
我不知道最后一个来自哪里,因此重复前三个论点。
答案 0 :(得分:0)
Mojo的AppAssembler Maven插件生成一个脚本,该脚本始终将提供给脚本的所有命令行参数附加到JVM的启动命令上。因此,如果您什么都不做,"$@"
将是用于启动程序的JVM命令的最后一件事。
<commandLineArguments>
标记用于在ARGLIST matcher之前注入其他命令行参数。
看来(对我来说)你认为你需要添加位置标记才能获得传递的参数,因此你添加的代码片段。那是两个:
关于第二点,考虑第二个参数是包含空间字符的文件名的情况。如果我为你的程序启动脚本
$ bin/foo.sh Document.txt Document\ 2.txt "Copy of Document 3.txt" Doc4.txt
您实际上会看到以下内容通过您提供的配置传递到Java程序:
Document.txt
(所有$ 1)Document
($ 2已展开,但未引用,因此现在重新评估)2.txt
Copy
($ 3已展开,但未引用,因此也会重新评估,空格再次被视为参数分隔符)of
Document
3.txt
Document.txt
(现在ARGLIST匹配器正确提供所有内容)Document 2.txt
Copy of Document 3.txt
Doc4.txt
解决方案很简单。停止尝试配置您不需要配置的东西!