Подтвердить что ты не робот

Командная строка для запуска задачи Ant с дефис в имени задачи

Имя задачи начинается с дефиса "-".

<?xml version="1.0" encoding="UTF-8"?>
<project name="proj">
    <target name="-task1">
        <echo>Done!</echo>
    </target>
</project>

Как я могу указать эту задачу при запуске ant script из командной строки? Это не сработало бы:

ant -task1 -f test.xml
4b9b3361

Ответ 1

Включить имя задачи в кавычки.

ant "-task1" -f test.xml

Обновление: Из Ant docs

Targets beginning with a hyphen such as "-restart" are valid,
and can be used to name targets that should not be called directly
from the command line.
For Ants main class every option starting with hyphen is an option for Ant itself
and not a target. For that reason calling these target from command line is not
possible. On the other hand IDEs usually don't use Ants main class as entry 
point and calling them from the IDE is usually possible.

Ответ 2

Некоторые люди запускают внутренние цели с помощью тире только для того, чтобы пользователи не могли запускать их из командной строки. Фактически, я делаю стандартную практику, чтобы все внутренние цели начинались с - именно по этой причине.

Вы можете попробовать старый трюк с двойным типом. У меня нет Ant, установленного в моей текущей системе, поэтому я не могу его протестировать. Двойные тире - общий трюк Unix, который используется большинством команд, чтобы помочь завершить параметры, когда у вас есть файлы и прочее, которые начинаются с тире. Кстати, задачи должны быть последними в вашей командной строке:

$ ant -f test.xml -- -task1

Хуже ухудшается, вы можете просто определить другую цель в своем build.xml файле, который зависит от этой цели с тире в ней:

<task name="sneaky"
    depends="-task1"/>

Затем вы можете позвонить sneaky:

$ant -f test.xml sneaky

Ответ 3

Из ANT целевого документа

Цели, начинающиеся с дефиса, такие как "-restart", действительны и могут использоваться для обозначения целей, которые не должны вызываться непосредственно из командной строки. Для основного класса Ants каждый параметр, начинающийся с дефиса, является опцией для самого Ant, а не цели. По этой причине вызов этой цели из командной строки невозможен.

Таким образом, пользователь не может вызывать цель с дефисом из командной строки.

Протестировано на платформе Windows 21 апреля 2016 года.