quarta-feira, 14 de julho de 2010

Alterar o classpath em tempo de execução

0

Muito comum essa dúvida, porém nem tão pratica :D.

Para ferramentas baseadas em plugins o ideal é usar OSGi mesmo, que funciona muito bem.

Mas existem casos em que precisamos de um determinado jar que não está no classpath da aplicação seja adicionado de acordo com as vontades do usuário.
Existe um metodo bem simples, usando reflection que permite que isso seja feito.

File f = new File("ABSOLUTE FILE PATH");
URL url = f.toURI().toURL();
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(classLoader, url);

o metodo toURL dentro da classe file está deprecated, então usamos o toURI e depois toURL, lembrando que para criar o arquivo é necessário o caminho completo do Jar.

usando reflection pegamos o metodo protegido "addURL" dentro do URLClassLoader, e simplesmente o invocamos :D

Bem simples e funcional.

0 comentários:

 
Design by ThemeShift | Bloggerized by Lasantha - Free Blogger Templates | Best Web Hosting