gpt4 book ai didi

gradle - 在条件下应用Gradle配置

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

我只想在满足条件时在Gradle脚本中应用配置:

useRepo = System.getenv()["IGNORE_REPO_CFG"] == null

buildscript {
useRepo && repositories { // <== HERE
maven.url 'http://localhost:8081/artifactory/release'
}
}

subprojects {
configurations {
all {
useRepo && resolutionStrategy { // <== HERE
cacheChangingModulesFor 0, 'seconds'
cacheDynamicVersionsFor 0, 'seconds'
}
}
}
}

由于Groovy / Gradle范围的魔力,我无法将 useRepo传递给 buildscriptsubprojects.configurations.all范围。

我在类里面阅读了有关包装的信息:
class Cfg {
static final useRepo = System.getenv()["SA_IGNORE_REPO_CFG"] == null
}

但是在 Cfg.useRepo上我得到了:
java.lang.ClassNotFoundException: Cfg

更新启用:
project.ext.useRepo = System.getenv()["SA_IGNORE_REPO_CFG"] == null
buildscript {
project.ext.useRepo && repositories {
maven.url 'http://localhost:8081/artifactory/lognet-release'
}
}

我有:
Caused by: groovy.lang.MissingPropertyException: Cannot get property 'useRepo' on extra properties extension as it does not exist

最佳答案

就像您尝试过的那样,您应该使用project.ext:

project.ext.useRepo = System.getenv()["SA_IGNORE_REPO_CFG"] == null

但是当您现在尝试在 project.ext中使用 subprojects时,它是空的,因为在此项目中未定义它。所以您需要使用rootProject.ext来访问它,因为您在那里定义了它
subprojects {
configurations {
all {
rootProject.ext.useRepo && resolutionStrategy { // <== HERE
cacheChangingModulesFor 0, 'seconds'
cacheDynamicVersionsFor 0, 'seconds'
}
}
}
}

您可以尝试在 ext内使用 buildscript,但这不起作用,因为先执行 buildscript -closure,然后再执行另一个脚本。参见 this Gradle Discussion

如果要全部完成,可以在 gradle.ext内的 settings.gradle上指定此变量。
gradle.ext.useRepo = System.getenv()["SA_IGNORE_REPO_CFG"] == null

然后使用它。
buildscript {
gradle.ext.useRepo && repositories {
maven.url 'http://localhost:8081/artifactory/lognet-release'
}
}

关于gradle - 在条件下应用Gradle配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568820/

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