gpt4 book ai didi

gradle - 升级到 Gradle 2.2 后不再在扩展上调用 methodMissing

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

我们的构建使用 gradle 中具有动态方法的自定义插件扩展。这在 gradle 2.1 中运行良好,但在 2.2 中不再调用 methodMissing 并且我得到以下异常(这是由部分引起的):

Caused by: org.gradle.api.internal.MissingMethodException: Could not find method common() for arguments [api] on org.gradle.api.internal.artifacts.dsl.DefaultComponentModuleMetadataHandler_Decorated@1bef1304.
at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
at org.gradle.api.internal.artifacts.dsl.DefaultComponentModuleMetadataHandler_Decorated.invokeMethod(Unknown Source)
...

如何使用 gradle 2.2 让动态函数在我们的构建系统中工作?

的背景:

这些动态方法用于几件事,但一个是简化项目如何依赖其他项目(这是一个非常大的系统,有超过 80 个子项目,每个子项目可能有多个命名 API(公共(public)、内部、附加组件等)) .

这是我的插件的应用:
void apply(Project project) {
project.subprojects.each { subproject ->
subproject.extensions.create("modules", ModuleExtension.class ) }
}

ModuleExtension 除了 methodMissing 之外没有任何变量或函数:
def methodMissing(String name, args)
{
//return project dependency based on name/args. This no longer gets called in 2.2!
}

gradle 文件中的示例用法:
dependencies {
compile module.nameOfModule( "name of api" )
}

我还在 ModuleExtension 中覆盖了以下内容,只是为了查看它们是否被调用,但它们不是:
def invokeMethod(String name, args)
def propertyMissing(String name)
def propertyMissing(String name, value)

最佳答案

我实际上无法在 Gradle 2.2 中重现此问题。然而,这在某种程度上是对 Gradle 扩展的误用。如果您只是想要一个全局可用的对象,我只需将其添加为项目额外属性。这具有不必为每个子项目创建的额外好处,因为项目从其父项目继承属性。

ext {
modules = new ModuleExtension()
}

编辑:这是由于对 module replacements 的新支持在 Gradle 2.2 中引入。符号 modulesdependencies 内 block 现在委托(delegate)给 ComponentModuleMetadataHandler而不是你的扩展。您要么必须将扩展名重命名为 modules 以外的名称。或使用 project.modules.nameOfModule 限定通话.

关于gradle - 升级到 Gradle 2.2 后不再在扩展上调用 methodMissing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219953/

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