正在开发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)发布于 2020-04-07 15:14:26
它是这样解决的:
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())https://stackoverflow.com/questions/61067302
复制相似问题