2016-12-05 68 views
0

我有一个多的gradle项目建设有一个包含任务,如本(简体)Ant构建脚本:如何在`vendor.gradle`供应商设置文件中使用ant.properties?

<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 
    } 
    } 
} 

和蚂蚁version属性仍然为空 - 请注意,它的工作原理之外这一点,我觉得作用域是有点不同的话,我认为这是在这种特定情况下

回答

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构建中。

相关问题