Rekursive Suche nach Klassen in Java Archiven

In welchem Java Archiv war noch einmal die Klasse X? Ist die Klasse Y vielleicht noch in einem anderen JAR vorhanden? Hier kann eine rekursive Suche im Dateisystem helfen indem als kleines Hilfswerkzeug die folgende Shell-Funktion in ~/.bashrc eingefügt wird.

search_jars() {
    search_dir=$1
    search_term=$2
    if [ -z "$search_term" -o -z "$search_dir" ];
    then
        echo "usage: search_jars [DIRECTORY] [SEARCH_TERM]"
        return 1
    fi
    echo "Searching JARs which contain classes matching the search term '$search_term' in directory '$search_dir'..."
    find $search_dir -name "*.jar" -type f -exec bash -c 'jar tvf "$1" | grep "$2"; if [ $? == 0 ]; then echo "Found in JAR $1"; fi' {} {} $search_term \;
}

Das folgende Beispiel ruft search_jars auf der Konsole im aktuellen Verzeichnis auf und findet sämtliche Java Archive, die einen Klassennamen enthalten, welcher mit Locator.class endet.

>search_jars . Locator.class
Searching JARs which contain classes matching the search term 'Locator.class' in directory '.'...
  1613 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/DOMLocator.class
   292 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/Locator.class
  1024 Tue Aug 01 18:46:22 CEST 2011 com/sun/xml/bind/validator/SAXLocator.class
Found in JAR ./jaxb1-impl.jar
   336 Thu Mar 23 12:38:12 CET 2011 javax/xml/bind/ValidationEventLocator.class
Found in JAR ./jaxb-api.jar
  1608 Tue Aug 01 18:46:46 CEST 2011 com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
  1568 Mon Mar 28 12:21:54 CEST 2011 1.0/com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
Found in JAR ./jaxb-xjc.jar

Hinterlasse eine Antwort