Ant规则/任务,可以将可变数量的cmd行参数转发给任务

时间:2011-09-22 19:37:04

标签: ant

我想要一个包含命令行传递参数的ant任务。命令行参数的数量可能不同。 具体来说,对于< java>蚂蚁内的任务。

我想在命令行上执行此操作:

$ ant run foo bar ...

理想情况下,“foo”和“bar”以及其他参数“...”将作为尾随参数传递给在< java>中创建的java实例。任务。
java会看到:

    $ java -classpath ./output Foobar foo bar ...

换句话说,我想要同样的蚂蚁< java>任务执行以下操作:

$ 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实例。 (本课题的目的是找到特定的蚂蚁机制)。




我见过的require preconfigured ant variables方法。也就是说,

 $ ant run -DARG1="foo" -DARG2="bar" ...

但该方法排除了可变长度参数列表。

有没有人知道可以转发给ant&lt; java&gt;的可变数量参数的方法。任务(最好不要求编写一套复杂的蚂蚁规则)?

1 个答案:

答案 0 :(得分:0)

这并不容易,因为Ant的command line看起来像这样:

ant [options] [target [target2 [target3] ...]]

这意味着您的变量arg list foo bar baz项将被视为目标,导致运行类似命名的Ant目标,或者如果它们不存在则抛出Ant。

一种选择是使用-Doption=value语法通过包装器脚本传递变量参数列表。也许:

ant -classpath ./output -Dmy_args=\"$@\" Foobar

在shell脚本中,然后使用java任务中传递的arg:

<arg line="${my_args}"/>

另一种选择是编写一个Java main()类,它将接受你想要的参数,然后为你调用Ant。