Reflection - Listar classes de um pacote  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Bom dia pessoal!

Estou pesquisando aqui, mas não consigo encontrar.
Não sei se são as minhas tags mas não consigo obter bons resultados.

Enfim, gostaria de saber se há algum modo, acredito que por reflection, de se obter uma lista das classes existentes em um pacote.
Isso é possível? Se for, como?

Realmente minhas pesquisas não tem retornado resultados satisfatórios, tentei começar pelo "Package.getPackage" mas os métodos que ele possui não ajudaram muito, ou não soube usa-los corretamente.

Agradeço pela ajuda antecipadamente.

Abraços.
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

cara, aparentemente não dá pra saber se tem como, mas se vc pegar um pacote e percorrer os arquivos contidos dentro desse pacote, vc pode procurar os arquivos .class (ou .java) dentro do diretorio.

att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Felagund wrote:cara, aparentemente não dá pra saber se tem como, mas se vc pegar um pacote e percorrer os arquivos contidos dentro desse pacote, vc pode procurar os arquivos .class (ou .java) dentro do diretorio.


Nossa, que trampo cara.
Imaginei que houvesse uma maneira mais simplificada de se fazer isso, como todo o resto de reflection.

A propósito, esqueci de dizer no post original que não posso usar framework algum.
Felagund
GUJ Master
[Avatar]

Membro desde: 26/07/2006 11:51:36
Mensagens: 1732
Localização: Santa e Bela Catarina
Offline

Pois é, bem que a classe Package podia ter uma metodo getDeclaredClasses


att
Rafael Felix

Rolling With Code
Twitter
[WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Felagund wrote:Pois é, bem que a classe Package podia ter uma metodo getDeclaredClasses


Era exatamente o que eu tava procurando hahaha.
Quanto a sua solução achei meio, ahn... não trabalhosa assim de difícil, mas cheira um pouquinho estranho, entende?
Se não existir outra alternativa mesmo vou sugerir outra abordagem aqui pro que queremos fazer. Mas isso não vem ao caso.
Se não aceitarem vai desse jeito mesmo uahhuauhaua

Abraços!
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Tchello wrote: Bom dia pessoal!

Estou pesquisando aqui, mas não consigo encontrar.
Não sei se são as minhas tags mas não consigo obter bons resultados.

Enfim, gostaria de saber se há algum modo, acredito que por reflection, de se obter uma lista das classes existentes em um pacote.
Isso é possível? Se for, como?


isso é possivel, mas não ha uma API padrão para isso. A razão se prende com o fato de que não é garantido que a jvm corra em cima de um OS com
sistema de arquivos.

Veja este topico http://www.guj.com.br/posts/list/127873.java#697230

com exemplo usando File ( não funciona com jar)

Se vc conseguri abstrair a localização de forma a poder usar qq URL de origem, o processo resume-se a listar os arquivos .class na pasta do pacote.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

sergiotaborda wrote:
Tchello wrote: Bom dia pessoal!

Estou pesquisando aqui, mas não consigo encontrar.
Não sei se são as minhas tags mas não consigo obter bons resultados.

Enfim, gostaria de saber se há algum modo, acredito que por reflection, de se obter uma lista das classes existentes em um pacote.
Isso é possível? Se for, como?


com exemplo usando File ( não funciona com jar)

Se vc conseguri abstrair a localização de forma a poder usar qq URL de origem, o processo resume-se a listar os arquivos .class na pasta do pacote.


Era esse meu medo, esse "módulo" ficará empacotado num jar para ser reaproveitado.
Procurarei por soluções alternativas. =Z

Abraços.
Ataxexe
JavaEvangelist
[Avatar]

Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline

Eu tenho um projetinho que, dentre algumas coisas, possui uma DSL pra isso. Talvez o código-fonte dele te dê alguma base (é bastante simples). Ele conta com a abstração que o Sérgio mencionou (baseada em URL) e tem 3 implementações: arquivos, jar e bundle do eclipse (pra usar em aplicativos RCP).

http://sourceforge.net/projects/trugger/

Exemplo:


Se precisar de ajuda pra fazer um (ou pra usar meu projeto) estou sempre por aqui.

Marcelo Guimarães

https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1694
Offline

Ataxexe wrote:Eu tenho um projetinho que, dentre algumas coisas, possui uma DSL pra isso. Talvez o código-fonte dele te dê alguma base (é bastante simples). Ele conta com a abstração que o Sérgio mencionou (baseada em URL) e tem 3 implementações: arquivos, jar e bundle do eclipse (pra usar em aplicativos RCP).

http://sourceforge.net/projects/trugger/

Exemplo:


Se precisar de ajuda pra fazer um (ou pra usar meu projeto) estou sempre por aqui.


Interessante cara, era por ai mesmo que eu tava querendo.
Pegar todas as classes de um pacote listando-as pra encontrar qual era implementação de determinada interface.

Vou estudar o código aqui, se tiver alguma dúvida posto de novo.

Muito obrigado!
Ataxexe
JavaEvangelist
[Avatar]

Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline

Era essa a minha necessidade quando fiz essa DSL. Espero que te ajude tanto quanto me ajudou

Apenas se atente que o padrão é ele buscar apenas no pacote e todas as classes (anônimas, internas, etc.), mas isso é facilmente configurável (tem métodos pra restringir o nível de acesso, buscar classes não-anônimas, em subpacotes, etc.)

Marcelo Guimarães

https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe
mews
Debugger
[Avatar]

Membro desde: 28/03/2009 06:45:07
Mensagens: 59
Offline

Desculpa abrir novamente esse tópico.

Estou utilizando a api trugger para listar classes que contenham anotação @Entity.
No meu caso preciso listar todas as classes de diferentes diretórios e não gostaria de definir tão especificadamente.

e sim:


valew

Ajudar os outros é viciante!

Willian Mews
Analista de Desenvolvimento
Estudante de Engenharia da Computação
[WWW] [MSN]
Ataxexe
JavaEvangelist
[Avatar]

Membro desde: 11/10/2007 15:34:17
Mensagens: 418
Localização: Brasília
Offline

Você pode usar o método recursively:



Abraços

This message was edited 1 time. Last update was at 14/03/2011 19:37:13


Marcelo Guimarães

https://github.com/ataxexe
http://sourceforge.net/projects/trugger
http://www.youtube.com/user/ataxexe
http://www.flickr.com/photos/ataxexe
mews
Debugger
[Avatar]

Membro desde: 28/03/2009 06:45:07
Mensagens: 59
Offline

Muito obrigado.

Serviu perfeitamente.

abraços

Ajudar os outros é viciante!

Willian Mews
Analista de Desenvolvimento
Estudante de Engenharia da Computação
[WWW] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team