David Maciver created GROOVY-7980: ------------------------------------- Summary: Exception when using grab annotation with system classloader and ScriptEngine Key: GROOVY-7980 URL: https://issues.apache.org/jira/browse/GROOVY-7980 Project: Groovy Issue Type: Bug Affects Versions: 2.4.7 Environment: oracle-jdk-bin-1.8.0_101 Reporter: David Maciver Priority: Minor
This program throws the following exception when it should print a connection object. The system classloader is sun.misc.Launcher$AppClassLoader which is found in GrabAnnotationTransformation.java but is then rejected in isValidTargetClassLoaderClass in GrapeIvy.groovy If isValidTargetClassLoaderClass is modified to return true for this classloader, then the program produces the expected output. Could it accept any class loader parameter set from the system classloader? {code} import org.codehaus.groovy.jsr223.GroovyScriptEngineImpl; public class Main { public static void main(String[] args) throws Exception { GroovyScriptEngineImpl scriptEngine = new GroovyScriptEngineImpl(); scriptEngine.eval( "@GrabConfig(systemClassLoader=true)\n" + "@Grab('org.hsqldb:hsqldb:latest.release')\n" + "import java.sql.DriverManager\n" + "println DriverManager.getConnection('jdbc:hsqldb:mem:test')\n" ); } } {code} {code} Exception in thread "main" javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83) at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247) at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:184) at groovy.grape.GrapeIvy$chooseClassLoader.callCurrent(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166) at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:251) at groovy.grape.Grape.grab(Grape.java:167) at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378) at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321) at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:211) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:363) at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:150) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at Main.main(Main.java:8) {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)