public static void findClassDependencies(ClassLoader classLoader, ClassAcceptor acceptor, String...classesToResolve) throws IOException { findClassDependencies(classLoader, acceptor, ImmutableList.copyOf(classesToResolve)); }
URL classUrl = getClassURL(className, classLoader); if (classUrl == null) { continue; if (!acceptor.accept(className, classUrl, getClassPathURL(className, classUrl))) { continue;
URL classUrl = getClassURL(className, classLoader); if (classUrl == null) { continue; if (!acceptor.accept(className, classUrl, getClassPathURL(className, classUrl))) { continue;
public static void findClassDependencies(ClassLoader classLoader, ClassAcceptor acceptor, String...classesToResolve) throws IOException { findClassDependencies(classLoader, acceptor, ImmutableList.copyOf(classesToResolve)); }
private void findDependencies(Iterable<Class<?>> classes, final Set<String> entries, final JarOutputStream jarOut) throws IOException { Iterable<String> classNames = Iterables.transform(classes, new Function<Class<?>, String>() { @Override public String apply(Class<?> input) { return input.getName(); } }); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = getClass().getClassLoader(); } // Record the set of classpath URL that are already added to the jar final Set<URL> seenClassPaths = Sets.newHashSet(); Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { if (bootstrapClassPaths.contains(classPathUrl.getFile())) { return false; } if (!classAcceptor.accept(className, classUrl, classPathUrl)) { return false; } if (seenClassPaths.add(classPathUrl)) { putEntry(className, classUrl, classPathUrl, entries, jarOut); } return true; } }, classNames); }
private void findDependencies(Iterable<Class<?>> classes, final Set<String> entries, final JarOutputStream jarOut) throws IOException { Iterable<String> classNames = Iterables.transform(classes, new Function<Class<?>, String>() { @Override public String apply(Class<?> input) { return input.getName(); } }); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = getClass().getClassLoader(); } // Record the set of classpath URL that are already added to the jar final Set<URL> seenClassPaths = Sets.newHashSet(); Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { if (bootstrapClassPaths.contains(classPathUrl.getFile())) { return false; } if (!classAcceptor.accept(className, classUrl, classPathUrl)) { return false; } if (seenClassPaths.add(classPathUrl)) { putEntry(className, classUrl, classPathUrl, entries, jarOut); } return true; } }, classNames); }
@Override public void load(String name, Location targetLocation) throws IOException { // Create a jar file with the TwillLauncher and FindFreePort and dependent classes inside. try (JarOutputStream jarOut = new JarOutputStream(targetLocation.getOutputStream())) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = getClass().getClassLoader(); } Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { try { jarOut.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); try (InputStream is = classUrl.openStream()) { ByteStreams.copy(is, jarOut); } } catch (IOException e) { throw new RuntimeException(e); } return true; } }, RemoteLauncher.class.getName(), FindFreePort.class.getName()); } } });
@Override public void load(String name, Location targetLocation) throws IOException { // Create a jar file with the TwillLauncher and FindFreePort and dependent classes inside. try (JarOutputStream jarOut = new JarOutputStream(targetLocation.getOutputStream())) { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader == null) { classLoader = getClass().getClassLoader(); } Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { try { jarOut.putNextEntry(new JarEntry(className.replace('.', '/') + ".class")); try (InputStream is = classUrl.openStream()) { ByteStreams.copy(is, jarOut); } } catch (IOException e) { throw new RuntimeException(e); } return true; } }, RemoteLauncher.class.getName(), FindFreePort.class.getName()); } } });
final Set<URL> classPathSeen = Sets.newHashSet(); Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) {
final Set<URL> classPathSeen = Sets.newHashSet(); Dependencies.findClassDependencies(classLoader, new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) {
final Set<URL> classPathSeen = Sets.newHashSet(); Dependencies.findClassDependencies(classLoader, new Dependencies.ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) {
Dependencies.findClassDependencies(clz.getClassLoader(), new ClassAcceptor() { @Override public boolean accept(String className, final URL classUrl, URL classPathUrl) {
Dependencies.findClassDependencies(clz.getClassLoader(), new ClassAcceptor() { @Override public boolean accept(String className, final URL classUrl, URL classPathUrl) {