Skip to content

Instantly share code, notes, and snippets.

@gregw
Created October 10, 2017 05:50
Show Gist options
  • Save gregw/b10a710bf19fc95474ab0a73a54326f2 to your computer and use it in GitHub Desktop.
Save gregw/b10a710bf19fc95474ab0a73a54326f2 to your computer and use it in GitHub Desktop.
Test of package loading
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
public class TestPackageLoading
{
private static final class TestLoader extends URLClassLoader
{
private TestLoader(URL[] urls)
{
super(urls,null);
}
public Class<?> testDefineClass(String name, byte[] b, int off, int len)
{
return defineClass(name,b,off,len);
}
@Override
public Package getPackage(String name)
{
// TODO Auto-generated method stub
return super.getPackage(name);
}
@Override
public Package[] getPackages()
{
// TODO Auto-generated method stub
return super.getPackages();
}
}
public static void main(String[] args) throws Exception
{
File classes = new File("./target/classes").getAbsoluteFile();
TestLoader loader = new TestLoader(new URL[] {classes.toURI().toURL()});
Class<?> c = loader.loadClass("org.eclipse.jetty.classloader.transformer.message.nopackagedefinedmessage.ObjectFactory");
System.err.println(c);
Arrays.asList(loader.getPackages()).stream().map(Package::getName).filter(s->s.startsWith("org.eclipse.")).forEach(System.err::println);
loader.close();
loader = new TestLoader(new URL[] {classes.toURI().toURL()});
File classfile = new File("./target/classes/org/eclipse/jetty/classloader/transformer/message/nopackagedefinedmessage/ObjectFactory.class");
int len=(int)classfile.length();
byte[] data = new byte[len];
try(InputStream in = new FileInputStream(classfile))
{
int pos=0;
while (pos<len)
pos += in.read(data,pos,len-pos);
}
c = loader.testDefineClass("org.eclipse.jetty.classloader.transformer.message.nopackagedefinedmessage.ObjectFactory",data,0,len);
System.err.println(c);
Arrays.asList(loader.getPackages()).stream().map(Package::getName).filter(s->s.startsWith("org.eclipse.")).forEach(System.err::println);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment