Suche einzelne Java CLASS Files in einer Sammlung aus JAR Archiven
In größeren Java Projekten stellt sich irgendwann das Problem, dass eine Menge an Bibliotheken die Übersicht erschwert.
Speziell bei der Nutzung von Build Tools wie Maven, Ant oder SBT, steigt mit der Zeit die Anzahl der eingebundenen JARs.
Kommt es nun zu ClassLoader Problemen durch mehrfach verwendete Klassen oder mehrfachen Versionen einer eingebundenen JAR Datei, ist es hilfreich zu wissen in welchem JAR sich eine bestimmte CLASS Datei befindet.
Neben spezialisierten Webseiten wie findjar, lässt sich eine Suche allerdings auch offline durchführen.
Hierzu reicht es aus einfache BASH Tools zu kombinieren.
Der Ablauf ist der folgende:
- Gehe über jedes JAR Archive im aktuellen Verzeichnis
- Gib den Namen jedes JAR Archives aus (um hinterher eine Verbindung zwischen gefundender CLASS Datei und dem JAR zu bekommen)
- Gib den Inhalt jedes JAR Archives aus
jar -tvf "$j"
- Verwende
grep
um nach bestimmten ClassNames zu filtern – ignoriere hierbei Groß-und Kleinschreibung.
Das fertige Kommando sieht dann so aus:
for j in *.jar; do echo $j:; jar -tvf "$j" | grep -Hsi ClassName; done