Ant中loadproperties的类路径加载顺序是否有保障?
属性文件加载优先级问题
我需要加载分别存放在自定义配置目录和默认配置目录中的build.properties,要求自定义配置优先于默认配置(即当两个目录都有该文件时,使用自定义目录下的内容)。
目录结构如下:
+- defaultconfig * build.properties +- customconfig * build.properties <- 应加载此文件
我通过以下Ant代码实现了需求:
<loadproperties resource="build.properties" classpath="defaultconfig,customconfig" />
但令我意外的是,必须把customconfig放在classpath参数里defaultconfig的后面才能生效。
疑问:文件的搜索顺序是否始终是从类路径的最后一个路径到第一个?还是这种顺序不可靠?
回答
Ant的loadproperties标签在指定多个classpath路径时,搜索顺序是从左到右遍历classpath中的路径,找到匹配的资源就会加载。但关键在于:如果多个路径下都存在同名资源,后加载的资源会覆盖先加载的资源的同名属性。
你这里把customconfig放在defaultconfig之后,实际执行逻辑是:
- 先从
defaultconfig加载build.properties的所有属性 - 再从
customconfig加载build.properties的属性,覆盖之前已加载的同名属性
最终就实现了自定义配置优先的效果。
这种顺序是完全可靠的,属于Ant的明确设计行为。loadproperties会严格按照classpath参数中路径的顺序依次加载找到的资源,后加载的属性总是会覆盖先加载的,因此只要保持自定义路径在默认路径之后,就能稳定实现你的需求。
内容的提问来源于stack exchange,提问作者carl verbiest
相关产品推荐
相关产品推荐

