¿Existe una implementación de ClassLoader que pueda usar para cargar clases desde un InputStream?Cargando desde JAR como un InputStream?
Estoy intentando cargar un JAR para el que tengo un InputStream en un nuevo ClassLoader.
¿Existe una implementación de ClassLoader que pueda usar para cargar clases desde un InputStream?Cargando desde JAR como un InputStream?
Estoy intentando cargar un JAR para el que tengo un InputStream en un nuevo ClassLoader.
Esto es poco probable, ya que lo encontrará si intenta hacerlo usted mismo. No podrá acceder aleatoriamente a InputStream
para buscar las clases a medida que se solicitan, por lo que tendrá que almacenar en caché los contenidos en la memoria o en el sistema de archivos.
Si almacena en caché en el disco, simplemente use URLClassLoader.
Si almacena en memoria caché, necesitará crear algún tipo de Map
con JarInputStream y luego extender ClassLoader
(anulando los métodos apropiados). La desventaja de este enfoque es que mantiene los datos en la RAM innecesariamente.
Sé que esto no es realmente una respuesta a su pregunta con respecto a JAR/InputStream
. Pero seguir puede ser una solución alternativa a lo que está tratando de lograr. Aquí hay algunos códigos que agregarán una URL a classpath.
Es posible convertir un java.io.File
a URL
como f.toURI().toURL()
/**
* Adds a URL to current classpath.
* @param url url
*/
public static void addURL(URL u) {
URLClassLoader sysloader = (URLClassLoader)ClassLoader.getSystemClassLoader();
try {
Method method = URLClassLoader.class.getDeclaredMethod("addURL",parameters);
method.setAccessible(true);
method.invoke(sysloader,new Object[]{u});
System.out.println("Dynamically added " + u.toString() + " to classLoader");
}
catch (Exception e) {
e.printStackTrace();
}
}