我认为 args4j 做不到。我不会使用 args4j,它已经过时了。
试试jcommander。这是完全相同的想法,但与 args4j 不同,您可以将 jcommander 的 @Option 粘贴在 List<T> 上。请参阅文档的第 2.2 节(单击链接,转到 2.2。:P)
但是:请注意,如果我从字面上理解您的问题,那么您的问题是非常不可取的!
在 posix 风格的命令行参数中,你的字符串被解析为:
-
-i firstFile - 好的,firstFile 是 -i 选项的参数。
-
secondFile - 好的,这与 -i 完全无关,这是一个文件参数。
-
thirdFile - 同样的交易。
-
-o outFile - outFile 是 -o 开关的参数值。
您可能想要的以及 jcommander 的工作方式是您必须编写:
java -jar myprog.jar -i firstFile -i secondFile -i thirdFile -o outFile
如果你真的想让-i firstFile secondFile thirdFile 工作,那有点奇怪/非标准,当然,当需要非标准的东西时,标准库不太可能为你提供,所以你必须编写它全部手工。我建议您.. 稍微改变一下您想要的内容,以符合人们的期望,从而获得使用库为您获取它的好处。
然而,在命令行设计的这个兔子洞中走得更远,使用-i in1 -i in2 -i in3 会更好,但仍然不习惯且笨拙。通常的规则是通过无开关输入输入。编写命令行的正确方法是:
java -jar myprog.jar -o outFile firstFile secondFile thirdFile
这就是zip、curl、ffmpeg、java(可执行文件)等本身的工作方式。
args4j 和 jcommander 都可以做到这一点; args4j 通过@Arguments List<String> args;,jcommander 通过@Parameter。