terça-feira, 4 de agosto de 2009

findjar.com: Encontre o jarro perdido!



O problema: java.lang.ClassNotFoundException


Como desenvolvedor Java, você com certeza passou por isso alguma vez...
Eis um exemplo de stack trace em que ocorre este tipo de exceção:


Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 21 more


Para resolver isso, é preciso encontrar o arquivo JAR em que a classe referenciada se encontra e colocá-lo no classpath da aplicação que está sendo executada. Mas e se não soubermos onde fica essa classe...?

A solução 1: grep


Se estiver com sorte, você já possui a biblioteca que contém essa classe. Neste caso, no Linux basta executar um rgrep ou um grep -r e copiar o arquivo da biblioteca.

A solução 2: findjar.com


Caso você ainda não possua a biblioteca localmente, é preciso saber o nome do arquivo JAR e onde encontrá-lo na Internet...

Para a primeira pergunta, o site findJAR.com[1] é um grande auxílio. Trata-se de um motor de busca que nos ajuda a encontrar arquivos do tipo JAR que contêm as classes Java requeridas. Basta digitar o nome (simples ou qualificado) da classe que você precisa e iniciar a busca!

findJAR.com é uma mão na roda para resolver com facilidade problemas do tipo NoClassDefFoundError e ClassNotFoundException.

Referências:


[1] http://www.findjar.com