Ich habe ein Modul für ein Java-Projekt entwickelt. Das Modul ist abhängig von der externen Bibliothek ( fastutil
). Das Problem ist, dass die Datei fastutil.jar
einige Male schwerer ist als das gesamte Projekt selbst (14 MB). Ich verwende nur eine kleine Teilmenge der Klassen aus der Bibliothek. Das Modul ist jetzt fertig, und niemand wird es in Zukunft wahrscheinlich erweitern. Gibt es eine Möglichkeit, nur die relevante Klasse zu einigen fastutil_small.jar
zu extrahieren, damit andere nicht dieses zusätzliche Gewicht herunterladen müssen?
Verschleierungstools wie ProGuard bieten normalerweise eine Funktion, um nicht verwendete Klassen (und sogar Felder und Methoden) aus der JAR-Datei zu entfernen. Sie müssen jedoch darauf achten, dass alles noch funktioniert, weil Sie reflecton für den Zugriff auf Klassen oder Methoden verwenden, die ProGuard nicht analysieren kann.
Sie können nur diese Funktion verwenden und bereits einiges einsparen
Oder Sie kombinieren es mit anderen platzsparenden Verschleierungstechniken (z. B. Klassen- und Methodenumbenennung), um noch mehr Platz auf Kosten von schwierigerem Debugging zu sparen (Ihre Stack-Traces werden schwieriger zu parsen).
Von den Installationsanweisungen von fastutil:
Beachten Sie, dass die jar-Datei aufgrund der großen Anzahl von Klassen sehr umfangreich ist: Wenn Sie Ihr eigenes jar mit einigen enthaltenen fastutil-Klassen ausliefern möchten, sollten Sie sich AutoJar (auch verfügbar bei JPackage), um automatisch die notwendigen Klassen zu extrahieren.
Da es sich bei fastutil um eine LGPL-Open-Source-Software handelt, könnten Sie einfach die relevanten Quelldateien in Ihr Projekt kopieren und diese JAR-Datei löschen. Der Compiler wird Ihnen dann sagen, ob Sie alle benötigten Dateien haben. Bewahren Sie die Pakete einfach so auf, wie sie sind, und legen Sie eine Kopie der Lizenzdatei von fastutil an die Spitze.
Ja, ein primitives ist, ein Backup von Ihrem Originalglas zu haben. Entfernen Sie dann alle nicht verwendeten Klassendateien aus dem Jar. und es kann einige interne Verweise auf andere Klassen geben, die Sie hinzufügen können, wenn dies erforderlich ist. Dh während der Ausführung kann eine Klasse nicht gefunden Exception werfen, dann können Sie diese Klasse aus dem Original Jar zu diesem Jar hinzufügen.