Правило Ant / задача, которая может пересылать переменное число аргументов строки cmd в задачу - PullRequest
1 голос
/ 22 сентября 2011

Я хочу задачу муравья, которая включает переданные аргументы командной строки.Аргументы командной строки могут различаться по количеству. В частности, для задачи внутри ant.

Я хотел бы сделать это в командной строке:

$ ant run foo bar ...

В идеале"foo" и "bar" и другие аргументы "..." будут передаваться в качестве завершающих аргументов экземпляру java, созданному в задаче .Java будет видеть:

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

Другими словами, я хотел бы, чтобы та же самая задача муравья выполняла следующее:

$ 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" ...

Но этот метод исключает список аргументов переменной длины.

Кто-нибудь знает метод для переменного числа аргументов, который может быть передан муравью задача (желательно не требует написания сложного набора правил муравья)?

1 Ответ

0 голосов
/ 23 сентября 2011

Это не легко, потому что командная строка Ant выглядит следующим образом:

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

Это означает, что список переменных arg foo bar baz элементов будет рассматриваться как цели, что приведет к аналогичному имени Antвыполняемые цели или выкидывающие Ant ошибки, если они не существуют.

Один из вариантов - использовать синтаксис -Doption=value для передачи списка переменных переменных с помощью сценария-оболочки.Возможно:

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

в сценарии оболочки, а затем использовать переданный аргумент в задаче java:

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

Другой вариант - написать основной Java ()класс, который будет принимать аргументы такими, какими вы хотите, а затем вызывать для вас Ant.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...