una samsung reparar que pero falsa como cargando carga aparece groovy intellij-idea classloader junit4

groovy - samsung - tablet carga falsa



No se ha encontrado ningĂșn cargador de clases adecuado para agarrar (6)

El problema

Mirando el código fuente , esta excepción se lanza cuando el nombre del ClassLoader suministrado (o sus superclases) no es groovy.lang.GroovyClassLoader o org.codehaus.groovy.tools.RootLoader . es decir, el cargador de clases de destino debe ser una instancia de las clases mencionadas anteriormente (un IMHO con restricción de bits).

Una solución

Actualmente no sé cómo configurar un cargador de clases específico utilizando las @Grape / @Grab / @GrabConfig . Lo más cercano sería usar @GrabConfig(systemClassLoader=true) y asegurarse de que el cargador de clases del sistema sea una instancia de una de las clases anteriores de ClassLoader.

Si alguien lo sabe, hágamelo saber (y actualizaré esta respuesta).

Una solución

El siguiente código descargará por programación las uvas y las cargará en el GroovyClassLoader suministrado (es cierto, no es exactamente lo que desea).

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'') }

Tengo esto al comienzo de una clase:

@Grab(group = ''org.ccil.cowan.tagsoup'', module = ''tagsoup'', version = ''1.2'') class MyClass{...

Estoy intentando realizar una prueba de unidad de esta clase, pero cada vez que intento ejecutar pruebas de JUnit 4, aparece este error:

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

¿Algunas ideas? Estoy usando groovy 1.7.5



El uso de @Grab hace que el código no sea @Grab , al menos a partir del 26/01/2011.


Hay una solución más para probar una clase con la anotación @Grab :

  1. Extraer una interfaz de esta clase.
  2. Crea otra clase que implemente su interfaz. Mueva la anotación @Grab a esta clase. Luego, haz de esta clase un envoltorio simple, que solo pase todos los mensajes a la clase original.
  3. Ejecuta las pruebas contra tu clase original.
  4. Siempre que necesite tener una versión @Grab , use la envoltura.

Si no está usando systemClassLoader = true, parece que su IDE no está ejecutando el código con un compilador maravilloso, puede verificar que con una clase simple que genere el nombre de clase de su cargador de clases. Me imagino que intenta compilar las clases groovy y ejecutarlas con un cargador de clases no groovy.

Consulte también esta respuesta a Error general durante la conversión: no se ha encontrado un ClassLoader adecuado para su uso . Además, esta publicación del blog explica más acerca de cómo ejecutar clases de groovy precompiladas con el cargador de clases de acciones.


Supongo que has intentado añadir

@GrabConfig(systemClassLoader=true)

al igual que:

@Grapes([ @Grab(group = ''org.ccil.cowan.tagsoup'', module = ''tagsoup'', version = ''1.2''), @GrabConfig( systemClassLoader=true ) ]) class MyClass{...