49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
package de.dhbwstuttgart.environment;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URL;
|
|
import java.net.URLClassLoader;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class DirectoryClassLoader extends URLClassLoader implements IByteArrayClassLoader {
|
|
public DirectoryClassLoader(File directory, java.lang.ClassLoader parent) {
|
|
super(generateURLArray(dirToURL(directory)), parent.getParent());
|
|
}
|
|
|
|
public DirectoryClassLoader(List<File> directory, java.lang.ClassLoader parent) {
|
|
super(directory.stream().map(DirectoryClassLoader::dirToURL).collect(Collectors.toList()).toArray(new URL[0]), parent.getParent());
|
|
}
|
|
|
|
private static URL[] generateURLArray(URL url) {
|
|
return new URL[]{url};
|
|
}
|
|
|
|
private static URL dirToURL(File url){
|
|
if(!url.isDirectory())throw new RuntimeException(url.toString() + " is not a directory");
|
|
try {
|
|
return url.toURI().toURL();
|
|
} catch (MalformedURLException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Class<?> _defineClass(String name, byte[] code, int i, int length) throws ClassFormatError {
|
|
return defineClass(name, code, i, length);
|
|
}
|
|
|
|
@Override
|
|
public Class<?> findClass(String name) throws ClassNotFoundException {
|
|
return super.findClass(name);
|
|
}
|
|
|
|
public Class<?> _findLoadedClass(String name) throws ClassNotFoundException {
|
|
return super.findLoadedClass(name);
|
|
}
|
|
}
|