Atualmente estive pesquisando sobre alguma API que manipule arquivos .java que faz sua análise e possibilite a recuperação do nome das classes declaradas dentro desse arquivo, todos os métodos e atributos das respectivas classes.
Infelizmente não encontrei nada relacionado e implementar isso será mto demorado.
Será que existe algo assim?
Ficarei grato se alguem puder me passar essa informação.
A questão eh que eu queria fazer isso de um diretório externo. Tem como?
Vlw Mark_Ameba. =D
Marky.Vasconcelos
De uma maneaira fácil não.
Voce precisa ter essas classes carregadas no ClassLoader, até ai não é dificil usar o URLClassLoader para carregar os arquivos compilados, mas algo que falta na API Reflection é uma maneira de descobrir todas as classes de um package.
Ou voce pode armazenar o diretorio de onde voce carregou as classes de depois usar essa referencia para procurar dentro do sistema, mas isso vai dar um pouco de trabalho.
remixlara
Vlwwww.
Vou dar uma estudada nisso e qualquer coisa eu lanço aqui como eu fiz.
Obrigadão ae!
=D
remixlara
Ae, graças a Deus consegui… =D
Graças a sua dica Mark_Ameba dei uma pesquisada melhor e entendi como funciona tudo.
Vou por o código aqui
Filefile=newFile("C:\\modelo\\");//Pasta que contém os arquivos .classURLclassUrl=file.toURL();URL[]classUrls={classUrl};//Como o construtor do URLClassLoader é um array é necessário fazer issoURLClassLoaderucl=newURLClassLoader(classUrls);Classc=ucl.loadClass("Teste");// Arqui você carrega a classe que desejafor(Fieldf:c.getDeclaredFields()){System.out.println("Atributo - "+f.getName());}
Marky.Vasconcelos
Voce ainda pode fazer outra coisa, e carregar essas classes no ClassLoader padrão.
Filefile=newFile("C:\\modelo\\");//Pasta que contém os arquivos .classURLclassUrl=file.toURL();URLClassLoaderloader=(URLClassLoader)System.class.getClassLoader();MethodaddUrl=URLClassLoader.class.getDeclaredMethod("addUrl",URL.class);addUrl.setAccessible(true);addUrl.invoke(loader,classUrl);Classc=ucl.loadClass("Teste");// Arqui você carrega a classe que desejafor(Fieldf:c.getDeclaredFields()){System.out.println("Atributo - "+f.getName());}