Classpath Dinâmico

3 respostas
Sombriks

Senhores, preciso fazer a seguinte gambiarra:

Ao usar swt, teremos as mesmas assinaturas de método independente de que pataforma usemos. Todavia os jarfiles e as bibliotecas nativas são diferentes; eu poderia fazer scripts pra resolver isso pra mim, mas acho que a aplicação ficaria muito mais elegante se eu pudesse manipular (via System.algumacoisa) meu classpath pra mudar o que eu preciso…

Se mais alguém já brincou com isso ou sabe onde encontrar algo sobre, por favor poste aqui. No momento vou continuar a lidar e testar by myself, :smiley:

até.

3 Respostas

fabiofalci

Cara, tenho essa gambiarra para adicionar um jar ao classpath…

public static void addToClasspath(URL u) throws IOException {
        URLClassLoader sysloader = (URLClassLoader) ClassLoader
                .getSystemClassLoader();
        Class sysclass = URLClassLoader.class;

        try {
            Method method = sysclass.getDeclaredMethod("addURL", parameters);
            method.setAccessible(true);
            method.invoke(sysloader, new Object[] { u });
        } catch (Throwable t) {
            t.printStackTrace();
            throw new IOException(
                    "Error, could not add URL to system classloader");
        }

    }
peron
fabiofalci:
Cara, tenho essa gambiarra para adicionar um jar ao classpath....
public static void addToClasspath(URL u) throws IOException {
        URLClassLoader sysloader = (URLClassLoader) ClassLoader
                .getSystemClassLoader();
        Class sysclass = URLClassLoader.class;

        try {
            Method method = sysclass.getDeclaredMethod("addURL", parameters);
            method.setAccessible(true);
            method.invoke(sysloader, new Object[] { u });
        } catch (Throwable t) {
            t.printStackTrace();
            throw new IOException(
                    "Error, could not add URL to system classloader");
        }

    }

poderias colocar os imports corretos e também o que é essa variavel parameters que nao tá definida?

queria rodar isso ai, gostei muito desta soluçao dinamica.

obrigado

sds

fabiofalci

ta certo… ta ai a classe + imports

import java.io.IOException;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Util {
	private static final Class[] parameters = new Class[] { URL.class };

	public static void addToClasspath(URL u) throws IOException {
		URLClassLoader sysloader = (URLClassLoader) ClassLoader
				.getSystemClassLoader();
		Class sysclass = URLClassLoader.class;

		try {
			Method method = sysclass.getDeclaredMethod("addURL", parameters);
			method.setAccessible(true);
			method.invoke(sysloader, new Object[] { u });
		} catch (Throwable t) {
			t.printStackTrace();
			throw new IOException(
					"Error, could not add URL to system classloader");
		}

	}
}
Criado 26 de outubro de 2006
Ultima resposta 26 de out. de 2006
Respostas 3
Participantes 3