我正在尝试为不同的环境编写构建脚本。但是没有针对特定任务更新全局属性。 这是脚本:
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
任务中仍然是旧值?
答案 0 :(得分:1)
尝试重写setActiveProfiles
和setProperties
任务,如下所示:
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中阅读有关构建生命周期的内容。