我想要一个包含命令行传递参数的ant任务。命令行参数的数量可以不同。具体来说,对于
我想在命令行上这样做:
$ ant run foo bar ...
理想情况下,"foo"one_answers"bar"以及其他参数"…"将作为尾随参数传递给在
Java会看到:
$ java -classpath ./output Foobar foo bar ...
换句话说,我想要相同的ant
$ ant run foo
# executes "java -classpath ./output Foobar foo"
$ ant run foo bar
# executes "java -classpath ./output Foobar foo bar"
$ ant run foo bar baz
# executes "java -classpath ./output Foobar foo bar baz"
我想象这可能看起来像:
<project name="Foobar" basedir=".">
<property name="build" location="output"/>
<target name="run" >
<java failonerror="true" classname="Foobar" fork="true">
<classpath>
<dirset dir="${build}" />
</classpath>
<arg line="$@"/>
</java>
</target>
</project>
注意
<arg line="$@"/>
我想象类似上面的东西会将所有剩余的参数传递给java实例。(这个问题的目的是找到特定的蚂蚁机制)。
我所看到的方法都需要预先配置ant变量。也就是说,
$ ant run -DARG1="foo" -DARG2="bar" ...
但是该方法排除了可变长度的参数列表。
有谁知道一种方法可以将可变数量的参数转发给蚂蚁吗?任务(最好不需要编写一组复杂的蚂蚁规则)?
这并不容易,因为Ant的命令行是这样的:
ant [options] [target [target2 [target3] ...]]
这意味着您的可变参数列表foo bar baz
项将被视为目标,导致类似命名的Ant目标正在运行,或者如果它们不存在,Ant抛出错误。
一个选项是使用-Doption=value
语法通过包装器脚本传递变量参数列表。也许:
ant -classpath ./output -Dmy_args="$@" Foobar
,然后在java
任务中使用传递的参数:
<arg line="${my_args}"/>
另一种选择是编写一个Java main()类,它将接受您希望的参数,然后为您调用Ant。