You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ant脚本中如何将变量的值作为变量名获取对应值?

如何在Ant脚本中实现“变量的变量”引用

哈哈,这个坑我之前踩过!Ant的默认属性插值机制是单次解析的,所以直接写${${abc}}不会自动递归解析成${def}再拿到xyz。不过有几个实用的办法能搞定,我给你细说下:

方法1:用内置<script>任务(无需额外依赖)

Ant本身自带脚本执行能力(Java 8及以上自带JavaScript引擎),可以直接操作Ant的属性对象,动态获取间接属性的值,这是我最常用的方案,兼容性拉满。

示例代码:

<!-- 先加载你的属性文件 -->
<property file="your-properties.properties"/>

<script language="javascript">
    // 先拿到abc的值,也就是"def"
    var targetKey = project.getProperty("abc");
    // 用这个key去取对应的属性值"xyz"
    var indirectValue = project.getProperty(targetKey);
    // 把结果存成一个新的Ant属性,方便后续脚本里直接用
    project.setProperty("indirect.result", indirectValue);
</script>

<!-- 现在就能直接用这个新属性啦 -->
<echo>间接获取到的值:${indirect.result}</echo>

运行后${indirect.result}就会输出xyz,完美解决你的问题。

方法2:用ant-contrib的<propertycopy>任务(需额外依赖)

如果你的项目已经在使用ant-contrib这个工具库,那用它提供的<propertycopy>任务会更简洁,专门用来处理这种属性间接引用的场景。

首先得确保你已经引入了ant-contrib的任务定义:

<taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
        <pathelement location="path/to/ant-contrib-1.0b3.jar"/>
    </classpath>
</taskdef>

然后直接用<propertycopy>:

<property file="your-properties.properties"/>

<!-- 把${abc}对应的属性值复制到新属性里 -->
<propertycopy name="indirect.result" from="${abc}"/>

<echo>间接获取到的值:${indirect.result}</echo>

这个写法更清爽,但需要额外引入ant-contrib的jar包,适合已经在用这个库的项目。


内容的提问来源于stack exchange,提问作者SunScorpio19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:46