另一个可能的解决方案是使用Ant和Gradle都能读取的外部属性文件
我正在寻找从ant的build.xml
文件中提取属性的可能干净简洁的方法。
我知道我可以使用ant.importBuild 'build.xml'
,但这将导入所有目标,可能导致名称冲突,例如与java插件,这是一个已知的问题。
一种方法是手动解析XML文件,例如使用Groovy的XmlSlurper
类。但是,这不会替换属性值中出现的任何属性引用。另一种方法是配置一个org.apache.tools.ant.Project
对象(类似于ant.importBuild
的做法),并从那里获取属性值。比如:
import org.apache.tools.ant.Project
import org.apache.tools.ant.ProjectHelper
task printPropertyValue {
doLast {
def antProject = new Project()
ProjectHelper.configureProject(antProject, file("build.xml"))
def value = antProject.getProperty("some.property")
while (value.contains('${')) {
value = antProject.replaceProperties(value)
}
println value
}
}
可能有更好的方法递归地替换属性引用,但我找不到。