java.net.URLClassLoader#getURLs ( )源码实例Demo

下面列出了java.net.URLClassLoader#getURLs ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: tsml   文件: ClassloaderUtil.java
/**
 * Add URL to CLASSPATH
 * @param u URL
 * @throws IOException if something goes wrong when adding a url
 */
public static void addURL(URL u) throws IOException {
  ClassloaderUtil clu = new ClassloaderUtil();
  //        URLClassLoader sysLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
  URLClassLoader sysLoader = (URLClassLoader) clu.getClass().getClassLoader();
  URL urls[] = sysLoader.getURLs();
  for (int i = 0; i < urls.length; i++) {
    if (urls[i].toString().toLowerCase().equals(u.toString().toLowerCase())) {
      System.err.println("URL " + u + " is already in the CLASSPATH");
      return;
    }
  }
  Class<?> sysclass = URLClassLoader.class;
  try {
    Method method = sysclass.getDeclaredMethod("addURL", parameters);
    method.setAccessible(true);
    method.invoke(sysLoader, new Object[]{u});
  } catch (Throwable t) {
    t.printStackTrace();
    throw new IOException("Error, could not add URL to system classloader");
  }
}
 
源代码2 项目: openjdk-8   文件: LeakTest.java
private static WeakReference<ClassLoader>
        testShadow(Class<?> originalTestClass) throws Exception {
    URLClassLoader originalLoader =
            (URLClassLoader) originalTestClass.getClassLoader();
    URL[] urls = originalLoader.getURLs();
    URLClassLoader shadowLoader =
            new ShadowClassLoader(urls, originalLoader.getParent());
    System.out.println("Shadow loader is " + shadowLoader);
    String className = originalTestClass.getName();
    Class<?> testClass = Class.forName(className, false, shadowLoader);
    if (testClass.getClassLoader() != shadowLoader) {
        throw new IllegalArgumentException("Loader didn't work: " +
                testClass.getClassLoader() + " != " + shadowLoader);
    }
    Method main = testClass.getMethod("main", String[].class);
    main.invoke(null, (Object) new String[0]);
    return new WeakReference<ClassLoader>(shadowLoader);
}
 
源代码3 项目: Pushjet-Android   文件: ClasspathUtil.java
public static void addUrl(URLClassLoader classLoader, Iterable<URL> classpathElements) {
    try {
        Set<URI> original = new HashSet<URI>();
        for (URL url : classLoader.getURLs()) {
            original.add(url.toURI());
        }
        JavaMethod<URLClassLoader, Object> method = JavaReflectionUtil.method(URLClassLoader.class, Object.class, "addURL", URL.class);
        for (URL classpathElement : classpathElements) {
            if (original.add(classpathElement.toURI())) {
                method.invoke(classLoader, classpathElement);
            }
        }
    } catch (Throwable t) {
        throw new RuntimeException(String.format("Could not add URLs %s to class path for ClassLoader %s", classpathElements, classLoader), t);
    }
}
 
源代码4 项目: beakerx   文件: ClassPath.java
static Map<URI, ClassLoader> getClassPathEntries(
        ClassLoader classloader) {
  Map<URI, ClassLoader> entries = new HashMap<>();
  // Search parent first, since it's the order ClassLoader#loadClass() uses.
  ClassLoader parent = classloader.getParent();
  if (parent != null) {
    entries.putAll(getClassPathEntries(parent));
  }
  if (classloader instanceof URLClassLoader) {
    URLClassLoader urlClassLoader = (URLClassLoader) classloader;
    for (URL entry : urlClassLoader.getURLs()) {
      URI uri;
      try {
        uri = entry.toURI();
      } catch (URISyntaxException e) {
        throw new IllegalArgumentException(e);
      }
      if (!entries.containsKey(uri)) {
        entries.put(uri, classloader);
      }
    }
  }
  return new HashMap<>(entries);
}
 
源代码5 项目: baratine   文件: DynamicClassLoader.java
private void buildParentClassPath(ArrayList<String> cp)
{
  ClassLoader parent = getParent();

  if (parent instanceof DynamicClassLoader)
    ((DynamicClassLoader) parent).buildClassPath(cp);
  else {
    cp.addAll(getClassPathList());

    for (; parent != null; parent = parent.getParent()) {
      // XXX: should be reverse order
      if (parent instanceof URLClassLoader) {
        URLClassLoader urlLoader = (URLClassLoader) parent;

        for (URL url : urlLoader.getURLs()) {
          String urlString = url.toString();
          if (urlString.startsWith("file:"))
            urlString = urlString.substring("file:".length());

          if (! cp.contains(urlString))
            cp.add(urlString);
        }
      }
    }
  }
}
 
源代码6 项目: Bukkit-Connect   文件: JavassistUtil.java
public static ClassPool getClassPool() {
	ClassPool classPool = ClassPool.getDefault();
	ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
	if (classLoader instanceof URLClassLoader) {
		URLClassLoader urlClassLoader = (URLClassLoader) classLoader;
		for (URL url : urlClassLoader.getURLs()) {
			try {
				// assume files
				String path = Paths.get(url.toURI()).toString();
				classPool.appendClassPath(path);
			} catch (Exception exception) {
				exception.printStackTrace();
			}
		}
	}
	return classPool;
}
 
源代码7 项目: HotswapAgent   文件: ArchivePathHelper.java
private static URL archivePathToURLViaURLClassLoader(URLClassLoader urlClassLoader, String archivePath) {
    URL[] urls = urlClassLoader.getURLs();
    if (urls != null) {
        for (URL url: urls) {
            String fileName = url.getFile();
            String checkedArchivePath = (fileName.endsWith("/") && !archivePath.endsWith("/")) ? (archivePath + "/") : archivePath;
            if (fileName.endsWith(checkedArchivePath)) {
                return archiveFilePathToURL(fileName);
            }
        }
    }
    return null;
}
 
源代码8 项目: hottub   文件: Test6805724.java
public static void main(String args[]) throws Exception {
    Class cl = Class.forName("Test6805724");
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();

    // Iterate over all 2^k-1 divisors.
    for (int k = 1; k < Long.SIZE; k++) {
        long divisor = (1L << k) - 1;
        System.setProperty("divisor", "" + divisor);
        ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
        Class c = loader.loadClass("Test6805724");
        Runnable r = (Runnable) c.newInstance();
        r.run();
    }
}
 
源代码9 项目: openstock   文件: ResourceBundleWrapper.java
/**
 * Instantiate a {@link URLClassLoader} for resource lookups where the
 * codeBase URL is removed.  This method is typically called from an
 * applet's init() method.  If this method is never called, the
 * <code>getBundle()</code> methods map to the standard
 * {@link ResourceBundle} lookup methods.
 *
 * @param codeBase  the codeBase URL.
 * @param urlClassLoader  the class loader.
 */
public static void removeCodeBase(URL codeBase,
        URLClassLoader urlClassLoader) {
    List urlsNoBase = new ArrayList();

    URL[] urls = urlClassLoader.getURLs();
    for (int i = 0; i < urls.length; i++) {
        if (!urls[i].sameFile(codeBase)) {
            urlsNoBase.add(urls[i]);
        }
    }
    // substitute the filtered URL list
    URL[] urlsNoBaseArray = (URL[]) urlsNoBase.toArray(new URL[0]);
    noCodeBaseClassLoader = URLClassLoader.newInstance(urlsNoBaseArray);
}
 
源代码10 项目: ccu-historian   文件: ResourceBundleWrapper.java
/**
 * Instantiate a {@link URLClassLoader} for resource lookups where the
 * codeBase URL is removed.  This method is typically called from an
 * applet's init() method.  If this method is never called, the
 * <code>getBundle()</code> methods map to the standard
 * {@link ResourceBundle} lookup methods.
 *
 * @param codeBase  the codeBase URL.
 * @param urlClassLoader  the class loader.
 */
public static void removeCodeBase(URL codeBase,
        URLClassLoader urlClassLoader) {
    List urlsNoBase = new ArrayList();

    URL[] urls = urlClassLoader.getURLs();
    for (int i = 0; i < urls.length; i++) {
        if (! urls[i].sameFile(codeBase)) {
            urlsNoBase.add(urls[i]);
        }
    }
    // substitute the filtered URL list
    URL[] urlsNoBaseArray = (URL[]) urlsNoBase.toArray(new URL[0]);
    noCodeBaseClassLoader = URLClassLoader.newInstance(urlsNoBaseArray);
}
 
源代码11 项目: The-5zig-Mod   文件: FileUtils.java
public static URL getClassLoaderURL() throws URISyntaxException, IOException {
	URLClassLoader classLoader = (URLClassLoader) Thread.currentThread().getContextClassLoader();
	for (URL url : classLoader.getURLs()) {
		File f = new File(url.toURI().getPath());
		ZipFile zipFile = new ZipFile(f);
		ZipEntry entry = zipFile.getEntry("eu/the5zig/util/io/FileUtils.class");
		zipFile.close();
		if (entry != null) {
			return url;
		}
	}
	throw new RuntimeException("Current Class Loader Context not found!");
}
 
源代码12 项目: openjdk-jdk9   文件: Test6823354.java
static void loadandrunclass(String classname) throws Exception {
    Class<?> cl = Class.forName(classname);
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();
    ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
    Class<?> c = loader.loadClass(classname);
    Runnable r = (Runnable) c.newInstance();
    r.run();
}
 
源代码13 项目: TencentKona-8   文件: Test6800154.java
public static void main(String[] args) throws Exception
{
    Class cl = Class.forName("Test6800154");
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();

    // Iterate over all divisors.
    for (int i = 0; i < DIVISORS.length; i++) {
        System.setProperty("divisor", "" + DIVISORS[i]);
        ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
        Class c = loader.loadClass("Test6800154");
        Runnable r = (Runnable) c.newInstance();
        r.run();
    }
}
 
源代码14 项目: TencentKona-8   文件: Test6805724.java
public static void main(String args[]) throws Exception {
    Class cl = Class.forName("Test6805724");
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();

    // Iterate over all 2^k-1 divisors.
    for (int k = 1; k < Long.SIZE; k++) {
        long divisor = (1L << k) - 1;
        System.setProperty("divisor", "" + divisor);
        ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
        Class c = loader.loadClass("Test6805724");
        Runnable r = (Runnable) c.newInstance();
        r.run();
    }
}
 
源代码15 项目: jdk8u60   文件: Test6805724.java
public static void main(String args[]) throws Exception {
    Class cl = Class.forName("Test6805724");
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();

    // Iterate over all 2^k-1 divisors.
    for (int k = 1; k < Long.SIZE; k++) {
        long divisor = (1L << k) - 1;
        System.setProperty("divisor", "" + divisor);
        ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
        Class c = loader.loadClass("Test6805724");
        Runnable r = (Runnable) c.newInstance();
        r.run();
    }
}
 
源代码16 项目: TencentKona-8   文件: Test5057225.java
static void loadAndRunClass(String classname) throws Exception {
    Class cl = Class.forName(classname);
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();
    ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
    Class c = loader.loadClass(classname);
    Runnable r = (Runnable) c.newInstance();
    r.run();
}
 
源代码17 项目: jdk8u60   文件: Test5057225.java
static void loadAndRunClass(String classname) throws Exception {
    Class cl = Class.forName(classname);
    URLClassLoader apploader = (URLClassLoader) cl.getClassLoader();
    ClassLoader loader = new URLClassLoader(apploader.getURLs(), apploader.getParent());
    Class c = loader.loadClass(classname);
    Runnable r = (Runnable) c.newInstance();
    r.run();
}
 
源代码18 项目: uima-uimaj   文件: MigrateJCas.java
/**
   * The classpath used to compile is (in precedence order)
   *   - the classpath for this migration app  (first in order to pick up v3 support, overriding others)
   *   - any Pears, going up the parent chain, closest ones first
   *   - any Jars, going up the parent chain, closest ones last
   *   - passed in migrate classpath
   * @return the classpath to use in compiling the jcasgen'd sources
   */
  private String getCompileClassPath(Container container) {
 
    // start with this (the v3migration tool) app's classpath to a cp string
    URLClassLoader systemClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
    URL[] urls = systemClassLoader.getURLs();
    StringBuilder cp = new StringBuilder();
    
    boolean firstTime = true;
    for (URL url : urls) {
      if (! firstTime) {
        cp.append(File.pathSeparatorChar);
      } else {
        firstTime = false;
      }
      cp.append(url.getPath());
    }
    
    // pears up the classpath, closest first
    Container c = container;
    while (c != null) {
      if (c.isPear) {
        cp.append(File.pathSeparator).append(c.pearClasspath);
      }
      c = c.parent;
    }
    
    // add the migrateClasspath, expanded
    
    if (null != migrateClasspath) {
      cp.append(File.pathSeparator).append(Misc.expandClasspath(migrateClasspath));
    }
 
    // add the Jars, closest last
    c = container;
    List<String> ss = new ArrayList<>();
    while (c != null) {
      if (c.isJar) {
        ss.add(c.root.toString());
      }
      c = c.parent;
    }
    Collections.reverse(ss);
    ss.forEach(s -> cp.append(File.pathSeparator).append(s));
        
//    System.out.println("debug: compile classpath = " + cp.toString());
    return cp.toString();
  }
 
源代码19 项目: java-specialagent   文件: LibraryFingerprint.java
/**
 * Creates a new {@code LibraryFingerprint} with the specified {@code URL}
 * objects referencing JAR files.
 *
 * @param classLoader The {@code ClassLoader} to use for resolution of classes
 *          that should not be part of the fingerprint.
 * @param presents List of classes the fingerprint must assert are present.
 * @param absents List of classes the fingerprint must assert are absent.
 * @param logger The logger to be used during the fingerprinting execution.
 * @throws NullPointerException If {@code manifest} or {@code scanUrls} is
 *           null.
 * @throws IllegalArgumentException If the number of members in
 *           {@code scanUrls} is zero.
 * @throws IOException If an I/O error has occurred.
 */
LibraryFingerprint(final URLClassLoader classLoader, final List<String> presents, final List<String> absents, final Logger logger) throws IOException {
  if (classLoader.getURLs().length == 0)
    throw new IllegalArgumentException("Number of scan URLs must be greater than 0");

  this.classes = new FingerprintBuilder(logger).build(classLoader, Integer.MAX_VALUE).toArray(new ClassFingerprint[0]);
  this.presents = presents;
  this.absents = absents;
}
 
/**
 * Constructs an extended class loader which delegates to the specified class loader and uses the specified parent
 * class loader.
 * 
 * @param delegate
 *            class loader to delegate to
 * @param parent
 *            the designated parent of this class loader
 * @param extend
 *            should be true if the scanning methods have to be delegated to the superclass
 */
public ExtendedJettyClassLoader(URLClassLoader delegate, ClassLoader parent, boolean extend) {
	super(delegate.getURLs(), parent);
	this.delegate = delegate;
	this.extend = extend;
}