【问题标题】:accessing property value in ivy which was set from ant script访问从 ant 脚本设置的 ivy 中的属性值
【发布时间】:2012-07-02 17:06:33
【问题描述】:

我有一个带有 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}。

谁能帮我解决这个问题?

【问题讨论】:

    标签: ant ivy


    【解决方案1】:

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

    被调用的目标在一个新项目中运行;请注意,这 表示由被调用目标设置的属性、引用等不会 坚持回到调用项目。

    在您的示例中,您在run 目标上使用depends 声明,并在Get_Revision 目标上使用antcall

    antcall 不会给出你想要的结果,原因如上所述。

    但是,depends 确实提供了您想要的结果。当包含depends 时,您确定您的测试场景(第二个回显)失败了吗?

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

    <property environment="env"/>
    <echo>${env.SOME_VAR_NAME}</echo>
    

    【讨论】:

    • 对不起,我没有在我的实际脚本中使用depends="Get_REvision"。但我不想在那种情况下使用依赖..only antcall
    • antcallback 任务在必须将目标内设置的属性返回给调用者时工作正常
    猜你喜欢
    • 2012-09-04
    • 2010-12-14
    • 2018-06-29
    • 2011-06-23
    • 2022-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多