Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ant中的参数化依赖目标_Ant_Depends_Macrodef - Fatal编程技术网

ant中的参数化依赖目标

ant中的参数化依赖目标,ant,depends,macrodef,Ant,Depends,Macrodef,我正在编写一个ant构建脚本来部署JAR。i、 e.只更新指定文件夹中的最终/测试版应用程序jar。 它检查部署的jar是否已经是最新的。如果是,则跳过使用除非标志运行目标 下面是目标的片段 <property name="deploy-dir-final" location="C:\Deploy\final" /> <property name="deploy-dir-beta" location="C:\Deploy\beta" /> <macrodef na

我正在编写一个ant构建脚本来部署JAR。i、 e.只更新指定文件夹中的最终/测试版应用程序jar。 它检查部署的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>

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

在这种情况下,我们是否可以使用类似于macrodef的东西进行代码重用?或者我们可以在macordef上使用if条件,使其仅在设置了某些属性时运行


或者我可以通过任何其他方式实现同样的目标,而不必编写两个目标来检查final和beta jar,只是检查它们是否是最新的

对于ant版本>1.9.1,您可以使用 可用于所有任务和嵌套元素,也可用于宏定义。
一些愚蠢的例子:

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

@{foo}


foobar blank!
foobar不是空的!

下面的链接可能有助于传递参数谢谢。这与我为部署jar所做的类似。我更感兴趣的是如何使用参数调用依赖目标。您不能将特定参数传递给依赖目标。如上所述,达成一致的方法是创建一个顶级目标,使用
antcall
调用通用目标。
<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>