Nicht verwendete Klassen aus großem Package löschen

Status
Nicht offen für weitere Antworten.

Agent

Mitglied
Hallo,

bei der Verwendung von größeren packages kommt es gerne vor, dass man eigentlich nur einen sehr sehr kleinen Anteil dieses packages braucht. Ich frage mich gerade, wie ich die restlichen .java-Dateien am zeitsparendsten löschen kann. Hierbei hätte ich zwei fragen:

1) Wenn ich meine main-Klasse compiliere, werden nur diejenigen .class-Dateien erstellt, die von meiner main-Klasse abhängig sind. Die restlichen .java-Dateien, die keine zugehörige .class Datei haben, kann ich quasi löschen. Hat jemand eine Idee, wie sich dieses Löschen unter Linux (openSUSE 11.1) am einfachsten automatisieren lässt?

2) Mit der oben beschriebenen Methode kann ich nur die Klassen löschen, die von absolut keiner Methode einer verwendeten Klasse abhängig sind. Nun kann aber folgendes passieren, was sich am Besten an einem Beispiel erklären lässt:

Beispiel: Die Hauptklasse verwendet Methode A.b aus Klasse A. Die Methode A.c aus Klasse A wird nicht verwendet. A.c erstellt aber ein Objekt einer Klasse B. Klasse B wird somit compiliert obwohl sie eigentlich gar nicht gebraucht wird.

Hat jemand eine Idee, wie ich in diesem Beispiel am einfachsten herausbekomme, dass Methode A.c und Klasse B nicht verwendet werden? Gibt es eine Möglichkeit, diese automatisch zu löschen?
 

Noctarius

Top Contributor
Von Anfang an sinnvoll in Packages verteilen. Nachträglich kann man zwar die Class-Files löschen, die Methode finde ich aber absolut unschön.

Wenn du Klassen nicht mehr brauchst schmeiss sie halt komplett weg, wenn es dir darum geht den Zugriff "zu sperren" ist OSGi dein Anlaufpunkt.
 

Landei

Top Contributor
Es gibt sowas (JBuilder kann das, Eclipse glaub ich auch), aber es ist gefährlich. Angenommen, du brauchst eine Datenbankverbindung mit JDBC. Dann kann man den DB-Treiber z.B. so spezifizieren:
Java:
Class.forName("mein.toller.db.Treiber");
//Connection mit dem Treiber aufbauen usw.
Es wird keine Methode an Treiber direkt aufgerufen, du findest ihn nicht über irgendwelche Aufrufketten. Trotzdem darf er nicht aus dem Package entfernt werden, sonst BUMM...
 
T

tuxedo

Gast
Die Frage ist viel eher:

Lohnt sich der Aufwand? Wieviele Megabytes sparst du damit ein? Im Zeitalter des DSL Anschlusses kommts nicht so drauf an ob ein Download jetzt 8 oder nur 5MB hat.

Ansonsten kann ich Noctarius nur zustimmen:

Wenn sich's um eigene Klassen handelt: Vorher schon gut sortieren. Eine "Eierlegende Wollmilchsaubibliothek" aus der man dann 85% rauslöscht bringt nix. Dann lieber 5 Bibliotheken daraus machen und nur 2 davon verwenden (jetzt nur so als Beispiel).

Aber um nochmal aufs löschen zurück zu kommen:
Spätestens bei Reflection und Co. wird's mit dem löschen von vermeintlich nicht gebrauchten Klassen "etwas" schwieriger ... Aber ich vermute mal da bist du noch nicht angelangt.

- Alex
 

Verjigorm

Top Contributor
Das FatJar-Plugin von Eclipse macht übrigends genau sowas.
Es packt nur die Klassen zusammen, die auch wirklich im Programm benötigt werden.
Hat man 20 Jars includet von der man jeweils nur 1% braucht ist der Unterschied schon gewaltig.

Wenn ich mein Projekt normal erstelle sind es alles zusammen ~18mb
Fatjar macht eine Jar mit 2MB

Ist natürlich mit Vorsicht zu geniesen, wegen eventueller Lizensrechte
 
M

maki

Gast
Ist natürlich mit Vorsicht zu geniesen, wegen eventueller Lizensrechte
Nicht nur dass, auch bei Reflection/DI funktzioniert das nicht mehr.


Ich bin auch sehr dafür jars so zu verwenden wie sie kommen, alles andere geht auf Dauer nicht gut.
 

Wildcard

Top Contributor
Das FatJar-Plugin von Eclipse macht übrigends genau sowas.
Es packt nur die Klassen zusammen, die auch wirklich im Programm benötigt werden.
Hat man 20 Jars includet von der man jeweils nur 1% braucht ist der Unterschied schon gewaltig.
In der Doku finde ich keinen Hinweis auf dieses Verhalten und IMO wäre das auch viel zu riskant.
Davon abgesehen ist FatJAR mittlerweile obsolete, da dessen Funktionalität in Eclipse 3.4 als Runnable Jar zur Verfügung steht und mit Eclipse 3.5 ein Jar Export hinzukommt der einen eigenen Jar-in-Jar Classloader ins Archiv injeziert.
 

Agent

Mitglied
@Wildcard: Ich finde da auch keinen Hinweis dass FatJar das kann
@tuxedo: Ob sich der Aufwand lohnt oder nicht ist nicht die Frage. Wahrscheinlich tut er das nicht. In meinem Fall geht es hier aber nicht um den Speichergewinn, sondern darum, dass ich dieses fremde package (als Student) für mein assignment nutzen darf, aber aufs Notwendigste kürzen muss.
 

Verjigorm

Top Contributor
Davon abgesehen ist FatJAR mittlerweile obsolete, da dessen Funktionalität in Eclipse 3.4 als Runnable Jar zur Verfügung steht und mit Eclipse 3.5 ein Jar Export hinzukommt der einen eigenen Jar-in-Jar Classloader ins Archiv injeziert.

Also bei keinem unserer 2 Projekte die wir zurzeit in Betrieb haben funktioniert dieser Jar Exorter so wie FatJar
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B von Java/Eclipse verwendete Datei existiert gar nicht? Java Basics - Anfänger-Themen 6
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
S Ist JDK jetzt free oder nicht? Java Basics - Anfänger-Themen 5
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
B Dekorator Muster - Irgendwas stimmt hier doch nicht? Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
MarvinsDepression Umgebungsvariable kann Java-Applikationen außerhalb der IDE nicht starten Java Basics - Anfänger-Themen 4
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7
H Kapselung protected aber in einer Kindklasse nicht zugänglich Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben