gpt4 book ai didi

gradle - 为什么我的构建脚本的不同部分为project.version属性看到不同的值?

转载 作者:行者123 更新时间:2023-12-03 05:18:29 25 4
gpt4 key购买 nike

我在allprojects部分的gradle中执行以下操作...

   if (project.hasProperty('myVersion')) {
project.ext.realVersion = project.myVersion
project.version = project.myVersion
println("project version set")
} else {
project.ext.realVersion = 'Developer-Build'
project.version = 'Developer-Build'
println("project version set to devbuild")
}

现在,我有一些可以正确使用project.version的代码并且可以正常工作,但是还有其他代码也使用了相同的属性project.versoin,结果为“未指定”。如果我都将其都更改为project.realVersion,则它们都可以工作。版本似乎是这个讨厌的特殊属性,似乎并不总是起作用。

使用属性的代码如下....(注意,我在使用realVersion的地方,版本不起作用,但是在其他位置也能正常工作:()....多么奇怪。
task versionFile() << {
File f = new File('output/version');
f.mkdirs()
File v = new File(f, 'version'+project.ext.realVersion)
println('v='+v.getAbsolutePath())
v.createNewFile()
}

task myZip(type: Zip) {
archiveName 'dashboard-'+project.version+'.zip'
from('..') {
include 'webserver/run*.sh'
include 'webserver/app/**'
include 'webserver/conf/**'
include 'webserver/play-1.2.4/**'
include 'webserver/public/**'
include 'webserver/lib/**'
}
from('output/version') {
include '**'
}
}
myZip.dependsOn('versionFile')
assemble.dependsOn('myZip')

最佳答案

该问题尤其与version属性无关。构建脚本将按顺序进行评估。如果不能保证在读取前设置version属性,则必须推迟读取该属性,直到配置阶段结束。否则,您将不可避免地遇到问题。一种方法是将读取属性的配置代码放入gradle.projectsEvaluated {}块中。 task.doFirst {}是另一种方法,但是有一个局限性,即最新检查不会考虑配置的值。

有时有一个更简单的解决方案。例如,对于诸如Zip之类的归档任务,您可以只设置baseNameextension而不是archiveName。与往常一样,我鼓励您学习DSL reference

关于gradle - 为什么我的构建脚本的不同部分为project.version属性看到不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643188/

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