1

我有一个带有 ant 脚本的 build.xml 文件在 build.xml 中,我为属性 env.REVISION 设置了一个值,在目标内部设置给它的值在它之外是不可访问的。例如,在下面的代码中,${env.REVISION} 设置为 1.0.1.0,但目标“Get_Revision”内的回显给出了正确的值,但目标“运行”内的回显不能替代版本号。echo 语句将输出作为 ${env.REVISION}

<project name="module_name" default="run" xmlns:ivy="antlib:org.apache.ivy.ant">
  ...
  <target name="run" description="Run" depends="Get_Revision">
    <antcall target="Get_Revision" />
    <echo>${env.REVISION}</echo>
    <ivy:retrieve/>
  </target>
  <target name="Get_Revision" description ="Gets the revision number">
    ...
    <property name="env.REVISION" value="1.0.1.0" />
    <echo>${env.REVISION}</echo>
    ...
  </target>
  ...
</project>

另外,我也想在 ivy.xml 文件中使用这个属性 ${env.REVISION} 。

谁能帮我解决这个问题?

4

1 回答 1

3

当你使用antcall任务时,你会创建一个新的上下文:

被调用的目标在一个新项目中运行;请注意,这意味着被调用目标设置的属性、引用等将不会持续回调用项目。

在如图所示的示例中,您在目标上使用depends声明run,以及antcallGet_Revision目标使用 .

由于antcall上面给出的原因,不会给出你想要的结果。

但是,depends确实给出了您想要的结果。你确定你的测试场景(第二个回声)在depends包含时会失败吗?

顺便说一句,env.前缀通常用于从环境变量加载的属性,如下所示:

<property environment="env"/>
<echo>${env.SOME_VAR_NAME}</echo>
于 2012-07-02T14:05:45.683 回答