ClassLoader (@Nullable String jar) { if (StringUtil.isEmpty(jar)) return null; if (jar.equals(myGreclipseJar)) { return myGreclipseLoader; } try { URL[] urls = { new File(jar).toURI().toURL(), Objects.requireNonNull(PathManager.getJarForClass(GreclipseMain.class)).toUri().toURL() }; ClassLoader loader = new URLClassLoader(urls, StandardJavaFileManager.class.getClassLoader()); Class.forName("org.eclipse.jdt.internal.compiler.batch.Main", false, loader); myGreclipseJar = jar; myGreclipseLoader = loader; return loader; } catch (Exception e) { LOG.error(e); return null; } }