Como encontrar uma classe ?

Dicas

Nesta dica mostrarei duas dicas que me ajudam muito no dia a dia.

1) Encontrar em qual biblioteca está uma classe 

Existem diversas situações onde é necessário encontrar em qual biblioteca encontra-se uma determinada classe Java.

Em 2004 coloquei uma dica de um script bash que resolve isso. Esse script mostra todos os arquivos que ele vasculhou para procurar a classe, mesmo que a classe não estivesse no arquivo, ele seria mostrada mesmo assim, causando desperdício de tempo e de tela.

Então aproveitei um tempinho e arrumei o script, onde é mostrado apenas o arquivo que contém a classe procurada e ainda arrumei a impressão da tela.

#!/bin/sh

usage="Uso:        findJavaClass directory ClassName   "

if [ $# -lt 2 ] ; then
    echo $usage
    exit 1
fi

if [ -d $1 ] ; then
    FIND_CMD="find $1"
else 
    echo "Diretorio nao existe"
    exit 1    
fi

$FIND_CMD -name \*.jar | while read jar_file ; 
do
    found_class=`unzip -l $jar_file | awk '{print $4}' | grep  $2`
    num_classes=`echo $found_class | wc -c`
    if [ $num_classes -gt 1 ] ; then 
        echo ""
        echo "Arquivo:"
        echo "    $jar_file"
        echo "Classes:"
        echo $found_class | sed 's/\ /\n/g' | sed 's/^.*/\ \ \ \ &/g'
    fi
done

  

E o um resultado como exemplo:

$ findJavaClass ~/javaSoftware/netbeans-5.5.1/ide7/modules/ext/jaxws21/ Task

Arquivo:
    /home/claudio/javaSoftware/netbeans-5.5.1/ide7/modules/ext/jaxws21/http.jar
Classes:
    sun/net/httpserver/ServerImpl$ServerTimerTask.class

Arquivo:
    /home/claudio/javaSoftware/netbeans-5.5.1/ide7/modules/ext/jaxws21/jaxb-xjc.jar
Classes:
    com/sun/istack/tools/ProtectedTask$AntElement.class
    com/sun/istack/tools/ProtectedTask.class
    com/sun/tools/jxc/AptBasedTask$1.class
    com/sun/tools/jxc/AptBasedTask$AptAdapter.class
    com/sun/tools/jxc/AptBasedTask$InternalAptAdapter.class

  

2) Como mostrar o conteúdo de um arquivo que está compactado ?

Quantas vezes por dia você descompacta um arquivo só para olhar o conteúdo do manifest ?

Então segue mais uma dica, onde não é necessário descompactar o arquivo.

$ unzip -c /home/claudio/javaSoftware/netbeans-5.5.1/ide7/modules/ext/jaxws21/jaxb-xjc.jar META-INF/MANIFEST.MF
  
Written on July 30, 2007