如何访问ant中的属性内的属性

时间:2012-05-22 13:34:31

标签: ant

大家好,请看一下这段代码

在我的属性文件中 双赢x86.pc-共享位置= E:\ Ant_Scripts

现在,我正在尝试从build.xml中调用PrintInstallerName_build,而PrintInstallerName_build位于test.xml中。在build.xml文件中,调用目标中的${platform.id} has value=win-x86和调用目标param1中的 <target name="PrintInstallerName" > <echo>PlatForm.Id====>${platform.id}</echo> <ant antfile="test.xml" target="PrintInstallerName_build"> <property name="param1" value="${platform.id}"/> </ant> <target name="PrintInstallerName_build" > <echo>${param1.pc-shared-location}</echo><!--${param1.pc-shared-location}--> <echo>${param1}.pc-shared-location}</echo><!--win-x86.pc-shared-location--> <echo>${win-x86.pc-shared-location}</echo><!--E:\\Ant_Scripts--> </target> 也具有值= win-x86

E:\\Ant_Scripts

你可以看到只有最后一个语句提供了正确的输出,但它是硬编码的,我想使用param1,输出应该是{{1}}我试图使用$和@但是没有效果,可能是我在做在某个地方有人可以帮忙取悦,我很震惊,明天是它的DOD。

3 个答案:

答案 0 :(得分:4)

请参阅Ant手册的Properties页面中的大括号嵌套

  

在默认配置中,Ant不会尝试平衡大括号   属性扩展,它只会消耗文本到第一个   创建属性名称时关闭大括号。即扩张时   像$ {a $ {b}}这样的东西将被翻译成两部分:

the expansion of property a${b - likely nothing useful.
the literal text } resulting from the second closing brace
     

这意味着您无法轻松使用名称为的扩展属性   由属性给出,但旧版本有一些解决方法   蚂蚁使用Ant 1.8.0和道具Antlib,您可以配置Ant   如果你需要这样的话,可以使用那里定义的NestedPropertyExpander   特征

答案 1 :(得分:1)

<target name="PrintInstallerName_process" >
       <echo>${param1}</echo><!--win-x86-->

        <macrodef name="testing">
                <attribute name="v" default="NOT SET"/>
                <element name="some-tasks" optional="yes"/>
                    <sequential>
        <echo>Source Dir of ${param1}: ${@{v}}</echo><!-- Dir of Win-x86:E:\Ant_Scripts-->
                                                    <some-tasks/>
                    </sequential>
            </macrodef>

            <testing v="${param1}.pc-shared-location">
                <some-tasks>

                </some-tasks>
            </testing>
    </target> 

这是它的工作方式,对我来说它无论如何都很好@sudocode你的小费把我带到那里非常感谢你

答案 2 :(得分:1)

您可以使用 var sortIt = myDateTime.sort(function(a, b) { var dateA = new Date( a.date ); var dateB = new Date( b.date ); return dateA < dateB ? -1 :( dateA > dateB ? 1 : 0); }); 来实现目标 请考虑您需要具有<propertycopy>

的属性值

使用${propA${propB}}的ant标记如下:

propertycopy

这将回显<propertycopy property="myproperty" from="PropA.${PropB}"/> <echo >${myproperty}</echo>

的值