gpt4 book ai didi

gradle - 子build.gradle在afterEvaluate事件中不评估

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

我有一个包含21个子项目的项目。这些子项目之一具有其自己的build.gradle文件,因为它有点晦涩。

现在,我在配置阶段有一个在构建中的配置设置。所以,在我的插件中

project.afterEvaluate {
if (project == project.rootProject) {
project.allprojects.each { proj ->
MetaExtension config = proj.getExtensions().getByType(MetaExtension)
if (config.inventoryHash == null){
throw new ProjectHashNotSetException(proj.name)
}
}
}
}

现在,如果我将所有内容都放在一个build.gradle文件中,那么一切都将完美运行。但是,一旦我将第21个子项目分解为自己的build.gradle文件,它现在总是返回为null。复制并过去回到一个build.gradle文件,可以正常工作,两个gradle文件,失败。

为什么会这样呢?

最佳答案

afterEvaluate是项目的一种方法,在评估项目之后而不是在评估所有项目之后才进行评估。

您需要重组逻辑。你可以G。添加evaluationDependsOnChildren()evaluationDependsOn '21st-project',那么您根本不需要afterEvaluate

实际上,如果显示的代码是您的实际代码,那么还是有点奇怪。您将afterEvaluate操作添加到所有项目,但仅当它是根项目时才执行。您也可以只将操作添加到根项目中,然后忽略条件。甚至更好,只需在每个项目中添加一个afterEvaluate即可检查该项目,例如

project.afterEvaluate {
MetaExtension config = extensions.getByType(MetaExtension)
if (!config.inventoryHash) {
throw new ProjectHashNotSetException(name)
}
}

那么评估顺序并不重要,因为每个评估顺序都是单独检查的。如果您愿意,这对于项目解耦也更好。 G。曾经想使用按需配置,这是您的方法无法实现的。

关于gradle - 子build.gradle在afterEvaluate事件中不评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46479976/

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