【发布时间】:2014-07-10 11:14:24
【问题描述】:
我有一个 ANT 构建系统,它使用以下宏调用不同项目的构建;
<macrodef name="buildComponent">
<attribute name="name"/>
<attribute name="dir"/>
<attribute name="antTarget"/>
<attribute name="antCommonDistDir" />
<sequential>
<available property="build.xml.exists.@{dir}" file="@{dir}/build.xml" />
<if>
<equals arg1="${build.xml.exists.@{dir}}" arg2="true" />
<then>
<java classname="org.apache.tools.ant.launch.Launcher"
fork="true"
failonerror="true"
dir="@{dir}"
timeout="4000000"
output="${common.build.dir}/log/@{name}.log"
taskname="startAnt" >
<jvmarg value="-Dant.home=${ant.home}"/>
<classpath>
<pathelement location="${ant.home}/lib/ant-launcher.jar"/>
</classpath>
<arg value="-Dbasedir=@{dir}"/>
<arg value="@{antTarget}"/>
<arg value="-Dprop1=${prop1}" />
<syspropertyset refid="project.common.properties" />
<sysproperty key="common.dist.dir.os" value="@{antCommonDistDir}" />
</java>
</then>
</if>
</sequential>
</macrodef>
我想从命令行覆盖属性,但问题是这些属性没有被 任务传递,我的后续构建使用默认值。例如,我正在执行构建如下;
ant dist -Dprop1=override.prop1 -Dprop2=override.prop2 -Dprop3=override.prop3
如您所见,目前我从命令行为 prop2 和 prop3 传递这些覆盖值的唯一选择是在每个任务的 <java /> 下添加 <arg />像我为“prop1”所做的那样传递的属性有效但不可取。无论如何我可以访问传递给 ANT 的所有属性并简单地将它们传递给<java /> 任务吗?
【问题讨论】:
标签: ant properties overriding