Mudar classpath em tempo de execução

4 respostas
F

Galera é o seguinte, estou fazendo uma aplicação e tenho que adicionar classes ou jars em tempo de execução. Li na última edição da JavaMagazine como fazer isso, só que não está dando certo.

Vejam só:

System.out.println("Classpath Antes: "+System.getProperty("java.class.path")); System.setProperty("java.class.path",System.getProperty("java.class.path")+";Z:\\Teste\\GerenciaMail.jar"); System.out.println("Classpath Depois: "+System.getProperty("java.class.path")); Class cls = Class.forName("mailManager.Correio");

Adicionei o GerenciaMail.jar no classpath e tentei criar um objeto do tipo Class usando o Class.forName(“mailManager.Correio”);

O que apareceu no console foi o seguinte:

[color=“red”]Classpath Antes: Z:\Projetos\pro_tcc\classes;Z:\Projetos\pro_tcc\lib\visuallib.jar;Z:\Projetos\pro_tcc\lib\JLink.jar

Classpath Depois: Z:\Projetos\pro_tcc\classes;Z:\Projetos\pro_tcc\lib\visuallib.jar;Z:\Projetos\pro_tcc\lib\JLink.jar;Z:\Teste\GerenciaMail.jar

java.lang.ClassNotFoundException: mailManager.Correio

at java.net.URLClassLoader$1.run(URLClassLoader.java:199)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:187)

at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)

at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:141)

at frb.tcc.teste.gui.Teste.main(Teste.java:2

Exception in thread main [/color]

O que eu tenho que fazer para poder “enxergar” essa classe?
Tem alguma relação com ClassLoader (não entendo bem)?

Grato desde já

4 Respostas

D

vc realmente precisa inseri-lo em tempo de execução!? Q mal há em adicioná-lo ao classpath antes de iniciar a execução!?

F

Preciso sim.
O que eu estou fazendo é uma ferramenta que faz engenharia reversa de um código Java para a geração da modelagem dinâmica. Isto é o meu projeto de fim de curso em Ciência da Computação.
Nela o usuário deve selecionar um arquivo (.jar) e daí eu tenho que adicioná-lo no classpath para poder trabalhar com ele.

Valeu

V

Vc poderia fazer com que a sua aplicação inicial solicitasse todas as configurações necessárias e a partir destes dados recebidos essa aplicação inicial chamaria a aplicação secundária com o CLASSPATH montado e esta faria a engenharia reversa nos .jar informados!

Funciona de modo semelhante nas IDEs quando vc roda a sua aplicação de dentro da IDE, ou seja, o programa inicial é a IDE, onde vc configura as bibliotecas que a sua aplicação vai usar, então a IDE forma o CLASSPATH e roda a tua aplicação (secundária). Entendeu?!

S

Só criando o seu próprio classloader

Criado 18 de fevereiro de 2005
Ultima resposta 21 de fev. de 2005
Respostas 4
Participantes 4