我有一个包含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文件,工作正常,2个gradle文件,失败。
为什么会这样?
答案 0 :(得分:0)
afterEvaluate
是项目的一种方法,在评估项目后评估,而不是在评估所有项目之后评估。
您需要重构逻辑。你可以。 G。添加evaluationDependsOnChildren()
或evaluationDependsOn '21st-project'
,您根本不需要afterEvaluate
。
实际上,如果显示的代码是您的实际代码,那么无论如何都有点奇怪。您向所有项目添加afterEvaluate
操作,但只有在它是根项目时才执行它。您也可以将操作添加到根项目中,然后省略条件。或者甚至更好,只需在每个项目中添加一个afterEvaluate,以完全检查该项目,如
project.afterEvaluate {
MetaExtension config = extensions.getByType(MetaExtension)
if (!config.inventoryHash) {
throw new ProjectHashNotSetException(name)
}
}
然后评估顺序并不重要,因为每个单独检查。如果你这样做,这对于项目解耦也更好。 G。曾经想要使用按需配置,这是你的方法无法实现的。