gradle - 如何将 `ObjectFactory.namedDomainObjectList(…)`反向移植到Gradle(5.6.4)

标签 gradle groovy

在gradle插件上工作。我试图将功能从gradle 6 ObjectFactory.namedDomainObjectList​(Class<T> elementType)移植到gradle 5.6.4。

我没有运气尝试过这个:

import org.gradle.testfixtures.ProjectBuilder
import org.gradle.api.internal.CollectionCallbackActionDecorator
import org.gradle.api.internal.DefaultDomainObjectCollection

def main() {
    def project = ProjectBuilder.builder().build();
    CollectionCallbackActionDecorator ccad;
    def myList = project.objects.newInstance(DefaultDomainObjectCollection.class,
                MyClass.class,
                new ListElementSource(),
                ccad);
}

static class MyClass implements Named {
    @Override
    String getName() {
        return "foobar"
    }
}

异常堆栈
org.gradle.api.reflect.ObjectInstantiationException: Could not create an instance of type org.gradle.api.internal.DefaultDomainObjectCollection.
    at org.gradle.internal.instantiation.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:54)
    at org.gradle.api.internal.model.DefaultObjectFactory.newInstance(DefaultObjectFactory.java:82)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.groovy.runtime.callsite.PlainObjectMetaMethodSite.doInvoke(PlainObjectMetaMethodSite.java:43)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:190)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:55)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:151)

github: Source of gradle instantiation

最佳答案

这样解决:

def myList = new DefaultNamedDomainObjectList(
        MyClass.class,
        new Instantiator() {
            @Override
            def <T> T newInstance(Class<? extends T> aClass, Object... objects) throws ObjectInstantiationException {
                project.objects.newInstance(aClass, objects)
            }
        },
        new DynamicPropertyNamer())

关于gradle - 如何将 `ObjectFactory.namedDomainObjectList(…)`反向移植到Gradle(5.6.4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61067302/

相关文章:

grails - 如何获取 Grails 域对象的属性的类型(类)?

intellij-idea - Gradle构建失败,出现许多 “unmappable character for encoding UTF-8”错误

arrays - Groovy,如何使用索引迭代列表

java - 如何将项目性质添加到Maven项目

android - 应用级别的gradle文件中flutterversionNameflutterVersionCode的flutter问题

groovy - 用 Spock 模拟 slf4j

groovy - 如何在 Groovy Bean 中定义私有(private) getter 方法?

Android 库使用 Gradle 进行组装,但在 connectedCheck 上出现 "package R does not exist"错误

android - Gradle 构建失败 - Java.exe 以非零退出值 2 完成

android - Gradle 构建在本地机器上工作但在 Jenkins CI 服务器上失败?