Aucun classloader approprié trouvé pour grab
J'ai, en ce début de classe:
@Grab(group = 'org.ccil.cowan.tagsoup', module = 'tagsoup', version = '1.2')
class MyClass{...
Je suis en train de test de l'unité de cette classe, mais chaque fois que j'essaie d'exécuter des tests JUnit 4, j'obtiens cette erreur:
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
Des idées? Je suis en utilisant groovy 1.7.5
source d'informationauteur Stefan Kendall
Vous devez vous connecter pour publier un commentaire.
À l'aide de
@Grab
rend le code impossible à vérifier, à moins que de 01/26/2011.Le Problème
En regardant le code sourcecette exception est levée lorsque l'fournis chargeur de classe du nom de la (ou des super-classes) n'est pas
groovy.lang.GroovyClassLoader
ouorg.codehaus.groovy.tools.RootLoader
. c'est à dire La cible du chargeur de classe doit être une instance de la ces classes (un peu restrictif à mon humble avis).Une Solution
Actuellement, je ne sais pas comment faire pour configurer un chargeur de classe spécifique à l'aide de
@Grape
/@Grab
/@GrabConfig
annotations. Le plus proche serait l'utilisation de@GrabConfig(systemClassLoader=true)
et de s'assurer que le Système de chargeur de classe est une instance de l'un des au-dessus du chargeur de classe des classes.Si quelqu'un sait, s'il vous plaît laissez-moi savoir (et je vais mettre à jour cette réponse).
Une Solution De Contournement
Le code suivant par programme de téléchargement de votre Raisins, et de les charger dans l'fournis GroovyClassLoader (certes, pas tout à fait ce que vous voulez).
Je suppose que vous avez essayé d'ajouter
comme suit:
Si vous n'êtes pas à l'aide de systemClassLoader=vrai, alors il semble que votre IDE n'est pas rrunning le code groovy compilateur, vous pouvez vérifier avec un simple groovy classe qui affiche le nom de la classe de son chargeur de classe. Je suppose qu'il essaie de compiler le groovy classes et de les exécuter avec un non-groovy classloader.
Voir aussi cette réponse Générale d'erreur lors de la conversion: Pas de chargeur de classe trouvée pour saisir. Aussi ce blog explique plus sur l'exécution de la pré-compilé groovy classes avec le chargeur de classe.
Ajouter le plugin instantané de site de mise à jour pour Kepler.
Cela semble résoudre le "..pas de problème de classloader". Malheureusement, j'ai encore dû ajouter le raisin pensions du classpath du projet, après cette.
Il y a encore une solution pour tester une classe avec
@Grab
annotation:@Grab
annotation à cette classe. Puis faire de cette classe un simple wrapper, qui passe tous les messages de la classe d'origine.@Grab
utiliser le wrapper.