任务将 xml 配置按树路径转为 ant 属性,如 myapp 生成 project-config.app.name;支持 keeproot、prefix、collapseattributes 等控制命名,semanticattributes="true" 可识别 location/refid 等语义属性并自动解析路径与引用。

Ant 的 <xmlproperty></xmlproperty> 任务用于从 XML 文件中读取结构化配置,并将其自动转为 Ant 属性,方便在 build.xml 中通过 ${xxx} 引用。它不是简单地“解析文本”,而是按 XML 树路径生成层级属性名,比如 <root><db><url>jdbc:h2:mem:test</url></db></root> 会生成属性 root.db.url。
基本用法:加载 XML 并映射为属性
假设你有配置文件 config.xml:
<project-config>
<app>
<name>MyApp</name>
<version>2.1</version>
</app>
<build>
<output-dir>dist</output-dir>
</build>
</project-config>
在 build.xml 中添加:
<xmlproperty file="config.xml" keepRoot="true"/>
之后即可使用:
-
${project-config.app.name}→MyApp -
${project-config.build.output-dir}→dist
注意:keepRoot="true"(默认)会让根元素名 project-config 成为属性前缀;设为 false 则直接以 app.name 形式访问。
控制属性命名与路径结构
可通过以下属性调整生成逻辑:
-
prefix="cfg":统一加前缀,如cfg.app.name -
collapseAttributes="true":把 XML 属性(如<file id="main" path="src/Main.java"></file>)也转为属性,生成file.id=main、file.path=src/Main.java -
delimiter=";":当某节点含多个子节点(如<libs><lib>a.jar</lib><lib>b.jar</lib></libs>),启用后可合并为libs.lib=a.jar;b.jar
启用语义处理(解析引用与特殊属性)
设 semanticAttributes="true" 后,<id></id>、<location></location>、<refid></refid>、<value></value> 等标签会被特殊识别:
<props> <src-dir location="src"/> <debug-flag value="on"/> <classpath refid="my.classpath"/> </props>
效果等价于:
-
<property name="src-dir" location="src"></property>(自动转为绝对路径) <property name="debug-flag" value="on"></property><property name="classpath" refid="my.classpath"></property>
此时还可嵌套使用 ${xxx} 引用,例如 <output-dir value="${src-dir}/../build"></output-dir> 会被自动展开(需确保引用顺序合理)。
常见注意事项
使用时需留意几点:
- XML 必须格式良好(well-formed),不校验 DTD 或 Schema;如需验证,设
validate="true" - 属性一旦定义即不可覆盖 ——
<xmlproperty></xmlproperty>加载的属性优先级高于后续<property></property>,但低于命令行-Dkey=value - 路径类属性(如
location)默认基于${basedir}解析,也可用rootDirectory指定基准目录 - 避免属性名含特殊字符(如点号过多、破折号),建议 XML 中用下划线或驼峰,如
<output_dir></output_dir>比<output-dir></output-dir>更稳妥










