2011-08-25
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 der Datei ~/.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 \
'$search_term' in '$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 'Locator.class' in directory '.'
com/sun/xml/bind/validator/DOMLocator.class
com/sun/xml/bind/validator/Locator.class
com/sun/xml/bind/validator/SAXLocator.class
Found in JAR ./jaxb1-impl.jar
javax/xml/bind/ValidationEventLocator.class
Found in JAR ./jaxb-api.jar
com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
com/sun/tools/xjc/reader/dtd/bindinfo/DOM4JLocator.class
Found in JAR ./jaxb-xjc.jar