groovy – 找不到合适的类加载器
发布时间:2020-12-14 16:35:08 所属栏目:大数据 来源:网络整理
导读:我在课上开始有这个: @Grab(group = 'org.ccil.cowan.tagsoup',module = 'tagsoup',version = '1.2')class MyClass{... 我试图单元测试这个类,但每当我尝试运行JUnit 4测试,我得到这个错误: Caused by: java.lang.RuntimeException: No suitable ClassLoad
我在课上开始有这个:
@Grab(group = 'org.ccil.cowan.tagsoup',module = 'tagsoup',version = '1.2') class MyClass{... 我试图单元测试这个类,但每当我尝试运行JUnit 4测试,我得到这个错误: Caused by: java.lang.RuntimeException: No suitable ClassLoader found for grab at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77) at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:52) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:190) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:198) at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:163) at groovy.grape.GrapeIvy$chooseClassLoader.callCurrent(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:149) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:227) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite$PogoCachedMethodSite.invoke(PogoMetaMethodSite.java:225) at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:51) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:44) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:153) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:216) at groovy.grape.Grape.grab(Grape.java:131) at groovy.grape.Grape$grab.callStatic(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:165) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:173) at ammoscanner.AmmoScanner.<clinit>(AmmoScanner.groovy) ... 30 more 有任何想法吗?我使用groovy 1.7.5 解决方法
问题
Looking at the source code,每当提供的ClassLoader的名称(或它的超类)不是groovy.lang.GroovyClassLoader或org.codehaus.groovy.tools.RootLoader时抛出这个异常.即目标类加载器必须是前述类的一个实例(有限制的IMHO). 一个办法 目前我不知道如何使用@ Grape / @ Grab / @ GrabConfig注释来配置一个特定的类加载器.最接近的是使用@GrabConfig(systemClassLoader = true),并确保System类加载器是上述ClassLoader类之一的一个实例. 如果有人知道,请让我知道(我会更新这个答案). 解决办法 以下代码将以编程方式下载您的葡萄,并将其加载到随附的GroovyClassLoader(当然不是你想要的). def loadGrapes(){ ClassLoader classLoader = new groovy.lang.GroovyClassLoader() Map[] grapez = [[group : 'org.ccil.cowan.tagsoup',module : 'tagsoup',version : '1.2']] Grape.grab(classLoader: classLoader,grapez) println "Class: " + classLoader.loadClass('org.ccil.cowan.tagsoup.jaxp.SAXParserImpl') } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |