Created
October 10, 2017 05:50
-
-
Save gregw/b10a710bf19fc95474ab0a73a54326f2 to your computer and use it in GitHub Desktop.
Test of package loading
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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