@Override public ClassLoader loadPlugin(Path pluginPath, PluginDescriptor pluginDescriptor) { PluginClassLoader pluginClassLoader = new PluginClassLoader(pluginManager, pluginDescriptor, getClass().getClassLoader()); pluginClassLoader.addFile(pluginPath.toFile()); return pluginClassLoader; }
public void addFile(File file) { try { addURL(file.getCanonicalFile().toURI().toURL()); } catch (IOException e) { // throw new RuntimeException(e); log.error(e.getMessage(), e); } }
synchronized (getClassLoadingLock(className)) { return findSystemClass(className); return getParent().loadClass(className); Class<?> loadedClass = findLoadedClass(className); if (loadedClass != null) { log.trace("Found loaded class '{}'", className); loadedClass = findClass(className); log.trace("Found class '{}' in plugin classpath", className); return loadedClass; loadedClass = loadClassFromDependencies(className); if (loadedClass != null) { log.trace("Found class '{}' in dependencies", className); loadedClass = findClass(className); log.trace("Found class '{}' in plugin classpath", className); return loadedClass; loadedClass = loadClassFromDependencies(className); if (loadedClass != null) { log.trace("Found class '{}' in dependencies", className);
/** * Add all {@code *.class} files from {@code classes} directories to plugin class loader. */ protected void loadClasses(Path pluginPath, PluginClassLoader pluginClassLoader) { for (String directory : pluginClasspath.getClassesDirectories()) { File file = pluginPath.resolve(directory).toFile(); if (file.exists() && file.isDirectory()) { pluginClassLoader.addFile(file); } } }
protected PluginClassLoader createPluginClassLoader(Path pluginPath, PluginDescriptor pluginDescriptor) { return new PluginClassLoader(pluginManager, pluginDescriptor, getClass().getClassLoader()); }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storages for plugin '{}'", pluginId); final Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException | URISyntaxException e) { log.error(e.getMessage(), e); } } return result; }
/** * Load the named resource from this plugin. * By default, this implementation checks the plugin's classpath first then delegates to the parent. * Use {@link #parentFirst} to change the loading strategy. * * @param name the name of the resource. * @return the URL to the resource, {@code null} if the resource was not found. */ @Override public URL getResource(String name) { log.trace("Received request to load resource '{}'", name); if (!parentFirst) { URL url = findResource(name); if (url != null) { log.trace("Found resource '{}' in plugin classpath", name); return url; } log.trace("Couldn't find resource '{}' in plugin classpath. Delegating to parent", name); return super.getResource(name); } else { URL url = super.getResource(name); if (url != null) { log.trace("Found resource '{}' in parent", name); return url; } log.trace("Couldn't find resource '{}' in parent", name); return findResource(name); } }
/** * Add all {@code *.jar} files from {@code lib} directories to plugin class loader. */ protected void loadJars(Path pluginPath, PluginClassLoader pluginClassLoader) { for (String libDirectory : pluginClasspath.getLibDirectories()) { Path file = pluginPath.resolve(libDirectory); List<File> jars = FileUtils.getJars(file); for (File jar : jars) { pluginClassLoader.addFile(jar); } } }
protected PluginClassLoader createPluginClassLoader(Path pluginPath, PluginDescriptor pluginDescriptor) { return new PluginClassLoader(pluginManager, pluginDescriptor, getClass().getClassLoader()); }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storage from plugin '{}'", pluginId); Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException e) { log.error(e.getMessage(), e); } } return result; }
/** * Load the named resource from this plugin. * By default, this implementation checks the plugin's classpath first then delegates to the parent. * Use {@link #parentFirst} to change the loading strategy. * * @param name the name of the resource. * @return the URL to the resource, {@code null} if the resource was not found. */ @Override public URL getResource(String name) { log.trace("Received request to load resource '{}'", name); if (!parentFirst) { URL url = findResource(name); if (url != null) { log.trace("Found resource '{}' in plugin classpath", name); return url; } log.trace("Couldn't find resource '{}' in plugin classpath. Delegating to parent", name); return super.getResource(name); } else { URL url = super.getResource(name); if (url != null) { log.trace("Found resource '{}' in parent", name); return url; } log.trace("Couldn't find resource '{}' in parent", name); return findResource(name); } }
synchronized (getClassLoadingLock(className)) { return findSystemClass(className); return getParent().loadClass(className); Class<?> loadedClass = findLoadedClass(className); if (loadedClass != null) { log.trace("Found loaded class '{}'", className); loadedClass = findClass(className); log.trace("Found class '{}' in plugin classpath", className); return loadedClass; loadedClass = loadClassFromDependencies(className); if (loadedClass != null) { log.trace("Found class '{}' in dependencies", className); loadedClass = findClass(className); log.trace("Found class '{}' in plugin classpath", className); return loadedClass; loadedClass = loadClassFromDependencies(className); if (loadedClass != null) { log.trace("Found class '{}' in dependencies", className);
@Override public ClassLoader loadPlugin(Path pluginPath, PluginDescriptor pluginDescriptor) { if (pluginClassLoader == null) { boolean parentFirst=true; pluginClassLoader = new PluginClassLoader(pluginManager, pluginDescriptor, parentClassLoader,parentFirst); } pluginClassLoader.addFile(pluginPath.toFile()); return pluginClassLoader; } }
/** * Add all {@code *.class} files from {@code classes} directories to plugin class loader. */ protected void loadClasses(Path pluginPath, PluginClassLoader pluginClassLoader) { for (String directory : pluginClasspath.getClassesDirectories()) { File file = pluginPath.resolve(directory).toFile(); if (file.exists() && file.isDirectory()) { pluginClassLoader.addFile(file); } } }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storages for plugin '{}'", pluginId); final Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException | URISyntaxException e) { log.error(e.getMessage(), e); } } return result; }
public void addFile(File file) { try { addURL(file.getCanonicalFile().toURI().toURL()); } catch (IOException e) { // throw new RuntimeException(e); log.error(e.getMessage(), e); } }
@Override public ClassLoader loadPlugin(Path pluginPath, PluginDescriptor pluginDescriptor) { PluginClassLoader pluginClassLoader = new PluginClassLoader(pluginManager, pluginDescriptor, getClass().getClassLoader()); pluginClassLoader.addFile(pluginPath.toFile()); return pluginClassLoader; }
/** * Add all {@code *.jar} files from {@code lib} directories to plugin class loader. */ protected void loadJars(Path pluginPath, PluginClassLoader pluginClassLoader) { for (String libDirectory : pluginClasspath.getLibDirectories()) { Path file = pluginPath.resolve(libDirectory); List<File> jars = FileUtils.getJars(file); for (File jar : jars) { pluginClassLoader.addFile(jar); } } }
@Override public Map<String, Set<String>> readPluginsStorages() { log.debug("Reading extensions storages from plugins"); Map<String, Set<String>> result = new LinkedHashMap<>(); List<PluginWrapper> plugins = pluginManager.getPlugins(); for (PluginWrapper plugin : plugins) { String pluginId = plugin.getDescriptor().getPluginId(); log.debug("Reading extensions storage from plugin '{}'", pluginId); Set<String> bucket = new HashSet<>(); try { Enumeration<URL> urls = ((PluginClassLoader) plugin.getPluginClassLoader()).findResources(getExtensionsResource()); if (urls.hasMoreElements()) { collectExtensions(urls, bucket); } else { log.debug("Cannot find '{}'", getExtensionsResource()); } debugExtensions(bucket); result.put(pluginId, bucket); } catch (IOException e) { log.error(e.getMessage(), e); } } return result; }