Archivo .jar sin permisos de escritura al cargar una clase.

jivilla
13 de Abril del 2005
Hola.

Tengo un archivo .jar que contiene una clase java. Tengo que cargar esa clase, y mas adelante en el código existe la opción de borrar ese archivo .jar.
El problema es que cuando leo una clase contenida en un archivo .jar, dicho archivo pierde todos los permisos de escritura. No se puede ni modificar, ni renombrar, ni borrar :(

Mi código de carga de la clase (en Win 2000) es:
public static Class loadClassFromJar (...) {
...... // tareas...
URLClassLoader cargadorClases = new URLClassLoader (url);
Class clase = Class.forName( (String) ClassName, true, cargadorClases);
return clase;
}

He probado a cargar la clase con loadClass, y el resultado es el mismo: en cuanto cargas la clase no se puede tocar el archivo. También he probado a hacer una instancia de la clase ántes de retornarla del método, para que la inicialize. Pero nada nuevo.

¿Alguien sabe cómo hacer que pueda borrarlo, o al menos porqué queda así?

Muchas gracias por adelantado.

jivilla
13 de Abril del 2005
Hola.

Para conseguir liberar los permisos del jar, hay que descargar dinámicamente la clase cargada, y sobre todo el ClassLoader que la cargó desde la url del .jar.

El método para liberar la memoria es llamar al recolector de basura. Si álguien conoce otra manera, por favor me la diga.
Pero el garbage no liberará la clase ni el classloader a menos que los igualemos a null previamente.

Así el código sería:

cargadorClases = null;
clase = null;
System.gc();
//System.gc(); //algunos sostienen que es mejor llamarlo dos veces y asegurarte.

El problema es que si llamamos a la clase después de ésto la hemos jodido. Hemos de asegurarnos de que ya no se va a utilizar. Muy seguros.

Saludos.