首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将`ObjectFactory.namedDomainObjectList(...)`移植到gradle (5.6.4)

如何将`ObjectFactory.namedDomainObjectList(...)`移植到gradle (5.6.4)
EN

Stack Overflow用户
提问于 2020-04-07 03:16:25
回答 1查看 37关注 0票数 1

正在开发gradle插件。我试着把这个功能从gradle 6 ObjectFactory.namedDomainObjectList​(Class<T> elementType)移植到gradle 5.6.4。

我试过了,但没有成功:

代码语言:javascript
复制
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"
    }
}

异常堆栈

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-04-07 15:14:26

它是这样解决的:

代码语言:javascript
复制
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())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61067302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档