параметризованные цели зависит от муравья - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над сценарием сборки ant для развертывания jar-файлов. то есть просто обновить финальную / бета-версию приложения в указанной папке. Это проверяет, является ли развернутый фляга уже современным. Если да, он пропускает выполнение цели, используя флажок.

Ниже приведен фрагмент цели

<property name="deploy-dir-final" location="C:\Deploy\final" />
<property name="deploy-dir-beta" location="C:\Deploy\beta" />

<macrodef name="macro-deploy-jar">
   <attribute name="deploydir" default="C:\Deploy\beta" />
   <sequential>
      <echo>Deploying jar</echo>
      <copy overwrite="true" file="C:/project/application.jar" todir="@{deploydir}"/>
      <echo>Deployed</echo>
   </sequential>
</macrodef>


<target name="deploy-jar-final" depends="is-final-jar-up-to-date" unless="jar.isUpToDate">
    <task-deploy-jar deploy-dir-path="${deploy-dir-final}"/>
</target>

<target name="deploy-jar-beta" depends="is-beta-jar-up-to-date" unless="jar.isBetaUpToDate">
    <task-deploy-jar deploy-dir-path="${deploy-dir-beta}"/>
</target>


<target name="is-final-jar-up-to-date">
   <echo message="Checking if deployed final jar is up-to-date"/>
   <uptodate property="jar.isUpToDate" targetfile="${deploy-dir-final}/application.jar" >
      <srcfiles dir= "${output-dir}" includes="application.jar"/>
   </uptodate>
</target>

<target name="is-beta-jar-up-to-date">
   <echo message="Checking if deployed beta jar is up-to-date"/>
   <uptodate property="jar.isBetaUpToDate" targetfile="${deploy-dir-beta}/application.jar" >
      <srcfiles dir= "${output-dir}" includes="application.jar"/>
   </uptodate>
</target>

Я использовал macrodef для повторного использования кода в случае целей deploy-jar. Но перед развертыванием я проверяю, обновлен ли уже существующий jar-файл. Это делается с помощью атрибута зависит от целей. Но я вижу здесь и область повторного использования кода, поскольку он отличается только путями. Я не понял, как мы можем передать параметры в зависимости от целей.

Есть ли способ использовать что-то похожее на macrodef для повторного использования кода в этом случае? или мы можем использовать условие if для macordef, чтобы оно могло запускаться, только если установлено какое-либо свойство.

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

1 Ответ

0 голосов
/ 31 августа 2018

С версией ant> 1.9.1 вы можете использовать , если только функция
Может использоваться для всех задач и вложенных элементов, также с macrodefs.
Несколько глупых примеров:

<project xmlns:if="ant:if">

 <macrodef name="foobar">
  <attribute name="foo"/>
  <attribute name="verbose"/>
  <sequential>
   <echo>@{foo}</echo>
   <echoproperties prefix="ant" if:true="@{verbose}"/>
  </sequential>
 </macrodef>

 <foobar verbose="yes" foo="1. bla bla bla bla.."/>
 <foobar verbose="no" foo="2. bla.."/>

</project>


<project
  xmlns:if="ant:if"
  xmlns:unless="ant:unless"
>

 <property name="foobar" value=""/>

 <echo if:blank="${foobar}">foobar blank !</echo>
 <echo unless:blank="${foobar}">foobar not blank !</echo>

</project>
...