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