Suche einzelne Java CLASS Files in einer Sammlung aus JAR Archiven

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:

  1. Gehe über jedes JAR Archive im aktuellen Verzeichnis
  2. Gib den Namen jedes JAR Archives aus (um hinterher eine Verbindung zwischen gefundender CLASS Datei und dem JAR zu bekommen)
  3. Gib den Inhalt jedes JAR Archives aus jar -tvf "$j"
  4. 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

Philipp Haußleiter

Ich bin 45 Jahre alt und arbeite seit etwa 17 Jahren als IT-Berater und Software Engineer. Meine Karriere begann mit vielfältigen Projekten – von iOS-Entwicklung über Microsoft BI Tooling bis hin zum Aufbau größerer Hadoop-Cluster. Heute liegt mein Schwerpunkt auf Software-Architektur, Systemdesign und der Entwicklung robuster, nachhaltiger IT-Lösungen. Dabei verfolge ich konsequent einen First-Principles-Ansatz: Ich hinterfrage bestehende Annahmen und bilde mir durch eigenes Ausprobieren eine fundierte, kritische Meinung zu neuen Technologien – auch zu KI –, um echten Mehrwert von Hype zu unterscheiden. Seit 2003 betreibe ich eigene Server, um einen Ausgleich zum Beratungsgeschäft zu finden und praktische Erfahrungen zu sammeln.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert