在maven插件appassembler </commandlinearguments>中使用标记<commandlinearguments>

时间:2012-10-19 15:59:50

标签: unix maven plugins appassembler

我正在使用maven插件appassembler生成一个unix脚本。在它的标签中,我说得像:

<commandLineArguments>
  <commandLineArgument>$1</commandLineArgument>
  <commandLineArgument>$2</commandLineArgument>
  <commandLineArgument>$3</commandLineArgument>
</commandLineArguments>

然而,结果脚本显示 $ 1 $ 2 $ 3“$ @”

我不知道最后一个来自哪里,因此重复前三个论点。

1 个答案:

答案 0 :(得分:0)

Mojo的AppAssembler Maven插件生成一个脚本,该脚本始终将提供给脚本的所有命令行参数附加到JVM的启动命令上。因此,如果您什么都不做,"$@"将是用于启动程序的JVM命令的最后一件事。

<commandLineArguments>标记用于在ARGLIST matcher之前注入其他命令行参数。

看来(对我来说)你认为你需要添加位置标记才能获得传递的参数,因此你添加的代码片段。那是两个:

  1. 不必要,因为默认情况下插件会生成一个传递所有必需参数的脚本。
  2. 实际上是一个潜在的错误,因为您配置的内容不能正确处理参数引用和转义。
  3. 关于第二点,考虑第二个参数是包含空间字符的文件名的情况。如果我为你的程序启动脚本

    $ bin/foo.sh Document.txt Document\ 2.txt "Copy of Document 3.txt" Doc4.txt
    

    您实际上会看到以下内容通过您提供的配置传递到Java程序:

    1. Document.txt(所有$ 1)
    2. Document($ 2已展开,但未引用,因此现在重新评估)
    3. 2.txt
    4. Copy($ 3已展开,但未引用,因此也会重新评估,空格再次被视为参数分隔符)
    5. of
    6. Document
    7. 3.txt
    8. Document.txt(现在ARGLIST匹配器正确提供所有内容)
    9. Document 2.txt
    10. Copy of Document 3.txt
    11. Doc4.txt
    12. 解决方案很简单。停止尝试配置您不需要配置的东西!