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

Есть ли способ обобщить цель Apache ANT?

У нас есть Apache ANT script для создания нашего приложения, а затем проверьте полученный JAR файл в контроле версий (в этом случае VSS). Однако теперь у нас есть изменение, которое требует от нас создания 2 файлов JAR для этого проекта, а затем проверить их как на VSS.

Текущая цель, которая проверяет исходный файл JAR в VSS, обнаруживает имя файла JAR через некоторое свойство. Есть ли простой способ "обобщить" эту цель, чтобы я мог повторно использовать ее для проверки в файле JAR с любым именем? На нормальном языке это, очевидно, вызовет параметр функции, но, насколько мне известно, в ANT действительно нет эквивалентной концепции.

4b9b3361

Ответ 1

Я предлагаю работать с макросами над subant/antcall, потому что основное преимущество, которое я нашел с помощью макросов, заключается в том, что вы полностью контролируете над свойствами, которые передаются макросу (особенно если вы хотите добавить новые свойства).

Вы просто реорганизуете свой Ant script, начиная с вашей цели:

<target name="vss.check">
    <vssadd localpath="D:\build\build.00012.zip" 
        comment="Added by automatic build"/>
</target>

создание макроса (обратите внимание на копию/вставку и замену с помощью @{file}):

<macrodef name="private-vssadd">
    <attribute name="file"/>
    <sequential>
        <vssadd localpath="@{file}" 
            comment="Added by automatic build"/>
    </sequential>
</macrodef>

и вызывать макросы с вашими файлами:

<target name="vss.check">
    <private-vssadd file="D:\build\File1.zip"/>
    <private-vssadd file="D:\build\File2.zip"/>
</target>

Рефакторинг, "способ Ant"

Ответ 2

Обычно считается неправильной идеей для контроля версий ваших двоичных файлов, и я не рекомендую это делать. Но если вам абсолютно необходимо, вы можете использовать antcall в сочетании с параметром для передачи параметров и вызова цели.

<antcall target="reusable">
    <param name="some.variable" value="var1"/>
</antcall>

<target name="reusable">
    <!-- Do something with ${some.variable} -->
</target>

Более подробную информацию о antcall задайте здесь.

Ответ 3

Взгляните на макросы Ant . Они позволяют вам определять повторяющиеся "подпрограммы" для сборки Ant. Здесь вы можете найти пример (пункт 15).

Ответ 4

Также проверьте задачу subant, которая позволяет вызывать одну и ту же цель в нескольких файлах сборки:

<project name="subant" default="subant1">
    <property name="build.dir" value="subant.build"/>
    <target name="subant1">
        <subant target="">
            <property name="build.dir" value="subant1.build"/>
            <property name="not.overloaded" value="not.overloaded"/>
            <fileset dir="." includes="*/build.xml"/>
        </subant>
    </target>
</project>

Ответ 5

Вы можете использовать Gant для script свою сборку с groovy, чтобы сделать то, что вы хотите, или посмотрите на groovy ant task.