我有一个多项目gradle构建,其中包含一个ant构建脚本,其中包含一个如此(简化)的任务:
<target name="get-version">
<!-- Goes out and fetches the versioning for each project and sets prop -->
<property name="version" value="${myDesiredVersion}" />
</target>
在我的build.gradle脚本里面我有一个ant脚本加载器然后我依赖这个目标;我的问题是,我的评估方式不允许我在ant.properties['version']
中使用我的vendor.gradle
// version = '1.0.2' -- works
version = ant.properties['version'] // doesn't work
我是一个gradle noobie并且最重要的是我正在迁移一个蚂蚁项目以开始使用gradle,所以我可能会偏离正轨。重要的是要注意,我不能直接在vendor.gradle
文件中包含该版本,因为它是由ant脚本生成的。
我不熟悉如何在gradle生命周期之前插入这个...我试过这样的事情
gradle.beforeProject { p ->
tasks['get-version'].execute() // appears to execute successfully?
configure(p) {
def vendorSettings = file("${myRoot}/vendor.gradle")
if(vendorSettings.exists()){
println "Loading vendor settings for project " + p
println ant.properties['version'] // but outputs null here
// ant.properties is still a valid observable map
apply from: vendorSettings
}
}
}
并且ant version
属性仍然为null - 请注意它在此之外工作,我认为范围有点不同,我认为它在这种特定情况下
答案 0 :(得分:1)
你可能有像
这样的东西task antTask {
//...
doLast {
file("vendor.properties").withInputStream { is ->
Properties props = new Properties()
props.load(is)
props.each { prop -> ext.set(prop.key, prop.value) }
}
}
}
执行任务后,您可以访问ext.version
等属性
但是,如果要在任务配置中使用属性,这将无法工作,因为所有任务都是先配置的,只有在必要时才执行。因此,只有在已配置所有其他任务后,您的antTask才会运行。因此,您可能需要重新考虑如何生成这些ant属性,并在运行gradle之前预先计算它们,或者将逻辑移植到gradle build。