gpt4 book ai didi

gradle - 在gradle中更改全局ext属性

转载 作者:行者123 更新时间:2023-12-03 04:01:03 39 4
gpt4 key购买 nike

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

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,则属性设置正确。但是 angularAppBasePath仍然是npm命令中的旧 /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任务中更改属性,但在 buildAngular任务中保留旧值?

最佳答案

尝试如下重写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中了解构建生命周期。

关于gradle - 在gradle中更改全局ext属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087267/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com