在gradle中更改全局ext属性

时间:2017-02-07 10:20:38

标签: gradle

我正在尝试为不同的环境编写构建脚本。但是没有针对特定任务更新全局属性。 这是脚本:

GetHashCode

如果我运行ext { springProfilesActive = 'development' angularAppBasePath = '/test/' } task setActiveProfiles { doLast { if (project.hasProperty('activeProfiles')) { springProfilesActive = project.property('activeProfiles') } } } task setProperties(dependsOn: ':setActiveProfiles') { doLast { if (springProfilesActive != 'development') { angularAppBasePath = '/' } println springProfilesActive println angularAppBasePath } } task buildAngular(type: Exec, dependsOn: ':setProperties') { workingDir angularPath commandLine 'cmd', '/c', "npm run build.prod -- --base ${angularAppBasePath}" } ,则正确设置了属性。但是buildAngular -PactiveProfiles=integration仍然是npm命令中的旧angularAppBasePath值。输出:

/test/

为什么在Executing external task 'buildAngular -PactiveProfiles=integration'... :setActiveProfiles :setProperties integration / :buildAngular > angular-seed@0.0.0 build.prod C:\myapp\src\main\angular > gulp build.prod --color --env-config prod --build-type prod "--base" "/test/" 任务中更改了属性但在setProperties任务中仍然是旧值?

1 个答案:

答案 0 :(得分:1)

尝试重写setActiveProfilessetProperties任务,如下所示:

task setActiveProfiles {
    if (project.hasProperty('activeProfiles')) {
        springProfilesActive = project.property('activeProfiles')
    }
}

task setProperties(dependsOn: ':setActiveProfiles') {
    if (springProfilesActive != 'development') {
        angularAppBasePath = '/'
    }
    println springProfilesActive
    println angularAppBasePath
}  

此行为是由不同的构建生命周期引起的。您可以在执行阶段(doLast闭包期间)修改变量,但在配置阶段使用它,这在执行之前就已发生。您可以在Gradle official user guide中阅读有关构建生命周期的内容。