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
相关产品推荐
相关产品推荐

