private URL[] getGroovyJars(ClassLoader parent) { Set<URL> urls = new HashSet<>(); findGroovyJarsDirectly(parent, urls); if (urls.isEmpty()) { findGroovyJarsFromClassPath(urls); } Assert.state(!urls.isEmpty(), "Unable to find groovy JAR"); return new ArrayList<>(urls).toArray(new URL[0]); }
DefaultScopeParentClassLoader(ClassLoader parent) { super(parent); this.groovyOnlyClassLoader = new URLClassLoader(getGroovyJars(parent), getClass().getClassLoader().getParent()); }
private void findGroovyJarsFromClassPath(Set<URL> urls) { String classpath = System.getProperty("java.class.path"); String[] entries = classpath.split(System.getProperty("path.separator")); for (String entry : entries) { if (isGroovyJar(entry)) { File file = new File(entry); if (file.canRead()) { try { urls.add(file.toURI().toURL()); } catch (MalformedURLException ex) { // Swallow and continue } } } } }
private void findGroovyJarsDirectly(ClassLoader classLoader, Set<URL> urls) { while (classLoader != null) { if (classLoader instanceof URLClassLoader) { for (URL url : ((URLClassLoader) classLoader).getURLs()) { if (isGroovyJar(url.toString())) { urls.add(url); } } } classLoader = classLoader.getParent(); } }
private static ClassLoader createParentClassLoader(GroovyCompilerScope scope) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (scope == GroovyCompilerScope.DEFAULT) { classLoader = new DefaultScopeParentClassLoader(classLoader); } return classLoader; }