可以向任务转发可变数量的cmd行参数的一种规则/任务



我想要一个包含命令行传递参数的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。

相关内容

最新更新