0

我正在使用 maven 插件 appassembler 来生成一个 unix 脚本。在它的标签中,我放了这样的东西:

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

但是,生成的脚本显示 $1 $2 $3 "$@"

我不知道最后一个来自哪里,因此它重复了前 3 个参数。

4

1 回答 1

0

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

该标签用于在ARGLIST 匹配器<commandLineArguments>之前注入额外的命令行参数。

似乎(对我来说)您认为您需要添加位置标记才能让参数通过,因此您要添加的代码段。那是两者:

  1. 不必要,因为默认情况下插件会生成一个传递所有必需参数的脚本。
  2. 实际上是一个潜在的错误,因为您配置的内容不能正确处理参数引用和转义。

关于第二点,考虑第二个参数是包含空格字符的文件名的情况。如果我像这样为你启动脚本程序

$ 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

解决方案很简单。停止尝试配置您不需要配置的东西!

于 2012-10-22T09:19:35.150 回答