| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 11:13:37
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Bom dia a todos,
Gostaria de saber como faço para adicionar um .class externo ao meu projeto em tempo de execução. Já li que isso deve ser feito adicionando esse .class ao classpath do projeto, inclusive encontrei aqui um código que faz isso, porém quando tento acessar a classe adicionada usando o Class.forName() dá um exception de classe não encontrada.
Segue o código que inclui a classe ao classpath da aplicação:
O meu objetivo é adicionar classes em tempo de execução para que usando reflection eu possa saber quais atributos e métodos que essas classes possuem.
Desde já agradeço a atenção de todos e aguardo retorno.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 11:41:32
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Creio que essa URL .. é uma URL de classpath.. então vc nao vai dar o caminho todo o arquivo .java.. e sim.. o classpath desse arquivo..
Suponha que vc tenha a classe x.Y
E que o arquivo dessa classe esteja no seguinte caminho /foo/bar/x/Y.class
O classpath seria apenas /foo/bar...
Quando vc pedir a classe x.Y o classloader procura no diretório /foo/bar (que está no classpath) pela classe x.Y no caminho /foo/bar/x/Y.class
Sacou?
This message was edited 1 time. Last update was at 09/07/2010 11:42:34
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 12:01:37
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
rogelgarcia wrote:Creio que essa URL .. é uma URL de classpath.. então vc nao vai dar o caminho todo o arquivo .java.. e sim.. o classpath desse arquivo..
Suponha que vc tenha a classe x.Y
E que o arquivo dessa classe esteja no seguinte caminho /foo/bar/x/Y.class
O classpath seria apenas /foo/bar...
Quando vc pedir a classe x.Y o classloader procura no diretório /foo/bar (que está no classpath) pela classe x.Y no caminho /foo/bar/x/Y.class
Sacou?
Realmente vc estava certo eu devia passar o diretorio onde estava o .class e nao ele em si, mas agora tenho outro erro. Quando eu uso o Class.forName("nome da classe"); ele da um ClassNotDefException colocando entre pararenteses "wrong name: <nome da classe>" nesse caso eu verifiquei que essa classe que estou adicionando pertencia a outro pacote no projeto onde ela foi originalmente criada, nesse caso como posso contornar esse problema?
Desde já agradeço a sua ajuda e coloco a disposição para trocar outros conhecimentos caso lhe seja necessáro.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 12:29:15
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Monte a estrutura correta de diretorios de acordo com o pacote original da classe...
se o pacote original era pka.pkb..
Crie o caminho /pka/pkb (dentro da pasta do seu classpath) e coloque a classe lá dentro..
Nao sei se compreendi se o problema era esse...
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 13:52:43
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
rogelgarcia wrote:Monte a estrutura correta de diretorios de acordo com o pacote original da classe...
se o pacote original era pka.pkb..
Crie o caminho /pka/pkb (dentro da pasta do seu classpath) e coloque a classe lá dentro..
Nao sei se compreendi se o problema era esse...
Nesse caso então acho que acabo perdendo o perfil dinâmico da aplicação, pois preciso ser capaz de adicionar qualquer classe de qualquer projeto nesse programa, para depois utilizar reflection e descobrir os seus métodos e atributos.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/07/2010 13:54:18
|
rogelgarcia
GUJ Master
![[Avatar]](/images/avatar/861e8bae74e22a572164fdb59b1caa8b.jpg)
Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline
|
Vc pode criar um outro classloader.. personalizado que nao dependa da URL entao...
|
Rógel Garcia, criador do framework NEXT
http://www.nextframework.org
 |
|
|
 |
|
|