参数化取决于蚂蚁中的目标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了参数化取决于蚂蚁中的目标相关的知识,希望对你有一定的参考价值。

我正在开发一个用于部署jar的ant构建脚本。即只更新指定文件夹中的最终/ beta应用程序jar。它检查部署的jar是否已经是最新的。如果是,则使用除非标志跳过目标。

以下是目标片段

<property name="deploy-dir-final" location="C:Deployfinal" />
<property name="deploy-dir-beta" location="C:Deployeta" />

<macrodef name="macro-deploy-jar">
   <attribute name="deploydir" default="C:Deployeta" />
   <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>

在deploy-jar目标的情况下,我使用macrodef进行代码重用。但在部署之前,我正在检查现有的jar是否已经是最新的。它的完成取决于目标的属性。但我可以在这里看到代码重用的范围,因为它只在路径上有所不同。我没有得到如何将参数传递给依赖目标。

在这种情况下,有没有什么方法可以使用类似于macrodef的代码重用代码?或者我们可以在macordef上使用if条件,以便它只应在设置某个属性时运行。

或者任何其他方式,我可以实现相同,而无需编写两个目标来检查最终和beta jar,只是为了检查它们是否是最新的。

答案

使用ant版本> 1.9.1,您可以使用if unless feature 可以用于所有任务和嵌套元素,也可以用于macrodef。 一些愚蠢的例子:

<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>

以上是关于参数化取决于蚂蚁中的目标的主要内容,如果未能解决你的问题,请参考以下文章

片段事务中的实例化错误

如何理解这段代码片段中的两对括号?

蚁狮优化算法解决多目标优化问题MOALO

蚁狮优化算法解决多目标优化问题MOALO

具有参数化模式名称并用于目标表中的 BULK INSERT 的动态游标

操作栏选项卡:使用多次实例化的单个片段时如何传递参数