3

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

在我的属性文件中,我有 win-x86.pc-shared-location=E:\Ant_Scripts

现在下面我试图PrintInstallerName_build从我的 build.xml 调用,而PrintInstallerName_build在 test.xml 中也是如此。在 build.xml 文件中,${platform.id} has value=win-x86在调用目标和被调用目标 param1 中也有 value=win-x86

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

正如你所看到的,只有最后一条语句给出了正确的输出,但它是硬编码的,我想使用 param1 并且输出应该是E:\\Ant_Scripts我尝试使用 $ 和 @ 但没有工作,可能是我在某处做错了,有人可以帮忙吗,我我被击中了,明天就是它的国防部。

4

3 回答 3

5

请参阅Ant 手册的属性页面中的花括号嵌套。

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

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

这意味着您不能轻松地使用由属性给出名称的扩展属性,但是对于旧版本的 Ant 有一些解决方法。使用 Ant 1.8.0 和 props Antlib,如果您需要这样的功能,您可以将 Ant 配置为使用其中定义的 NestedPropertyExpander。

于 2012-05-22T15:35:38.950 回答
2

您可以使用<propertycopy>它来实现它。
考虑到您需要具有以下属性值${propA${propB}}

使用ant标签propertycopy如下:

<propertycopy property="myproperty" from="PropA.${PropB}"/>

<echo >${myproperty}</echo>

这将呼应${propA${propB}}

于 2017-02-26T22:13:19.547 回答
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你的小费把我带到了那里,所以非常感谢你

于 2012-05-23T05:53:53.967 回答