Ein Tool zum Entfernen nicht benötigter Klassen aus der JAR-Datei

Ich suche nach einem Tool, das nicht benötigte Klassen aus der JAR-Datei entfernen kann (oder nur benötigte Klassen enthält).

Ich verwende Maven-basiertes Abhängigkeitsmanagement und baue Fat Jar mit sbt-assembly. Allerdings ist das resultierende Glas manchmal etwas zu dick (z. B. wenn ich einen Teil der hadoopVerpackung hinzufügen muss). Ich bin mir sicher, dass ich den größten Teil dieses Codes nicht benötige (zum Beispiel, weil ich nur das Dateisystem und nicht das gesamte mapreducePaket verwende), aber durch das Erstellen von Fat Jar füge ich automatisch alle Klassen hinzu.

Was ich tun möchte, ist, entweder ein JAR aus nur einem minimalen Satz von Klassen zu erstellen (ich bin offen für den Wechsel von sbtzu jedem anderen Tool, das dies kann) oder nicht benötigte Klassen aus einer vorhandenen JAR-Datei zu entfernen.

Mit "nicht benötigt" meine ich Klassen, die weder von meiner Hauptklasse noch von den Abhängigkeiten meiner Hauptklasse importiert werden.

Mir ist bewusst, dass solche Tools in Gegenwart von Reflexion und anderer dunkler Magie fehlschlagen können - das ist für mich in Ordnung, solange das Tool mit dem typischen Szenario funktioniert ( imported-Klassen müssen im Paket sein, andere müssen entfernt werden).

Es ist großartig, wenn das Tool Open Source ist, aber ich kann auch mit einer Closed-Source-Version leben, solange es kein Webtool ist (Unternehmens-IP-Schutzregeln).

Hüten Sie sich jedoch vor Reflektion und Laufzeitverknüpfung, ein solches Tool kann nur so viel leisten. Prinzipiell kann Java sogar Klassen abhängig von Benutzereingaben laden.

Antworten (1)

Ja, dies kann mit dem JBOSS- TattleTaleTool erreicht werden. Weitere Informationen finden Sie in diesem Beitrag: Unbenutzte JARS aus dem Projekt entfernen