Tool zum verkleinern der Jars?

  • Themenstarter Themenstarter CK
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.

CK

Aktives Mitglied
Hallo,
ich habe eine Anwendung die zahlreiche externe Jars benutzt.
Aus dem meisten dieser Jars benutze ich nur wenige Packages und Resourcen.
Trotzdem muss ich jedesmal die gesamten Jars mit in ein Projekt packen und
verschwende somit eine Menge speichern.

Zu meiner Frage:
Gibt es ein Tool das alle meine Jars durchsucht und nur die Klassen, Packages die
ich in verwende in einen neuen Jar zusammenpackt?

Ist recht schwierig denke ich, da ja auch die Abhängigkeiten untereinander berücksichtigt
werden muss. Das Problem denke ich ist das man viele Abhängigkeiten gar nicht
auflösen kann ohne die Sourcen zu haben.
 
Außerdem: wo soll der Sinn darin liegen, JARs zu verstümmeln? Nur, dass es weniger Platz braucht? Speicher ist billig.
 
Das mit den Lizenzen wird schwierig das stimmt.
Aber mit dem Argument "Der Speicher ist ja da!"
sollte man sich nicht abfinden.
Will man z.B. seine Programme per Mail verschicken,
dann ist meistens bei 10 MB Schluss und da wäre es
ja unsinnig eine Librarie von 5 MB mit
auszuliefern wenn man nur ein paar KB davon nutzt.
Wenn man jetzt in seinen Programm 5 bis 6
solcher Jars hat, hat das fertige Produckt im Extremfall
gleich 30 MB und man nutzt wahrscheinlich nur 1 MB.

Das wäre nicht wirklich optimal.
 
Benutze Webspace, ftp-zugang, direkte download-links oder sonstwas.

Ansonsten benutze ich privat z.B. GMX und die Freemail-Variante hat schon "E-Mail-Anhänge max. Größe (Empfang & Versand) 20 MB"
 
Abesehen davon, dass es nur in simplen Fällen möglich sein wird die Abhängigkeiten sicher zu ermitteln, frage ich ich mich doch wie man auf die Idee kommt und was der aufwand bringen soll.

Warum fragt niemand bei Windows an, ob die DLLs nicht so angepasst werden können, dass nur die von mir verwendeten Funktionen enthalten sind... würde mir auf C:\ eine Menge Platz sparen.

Bau doch aus deinem Auto die Rückbank aus, wenn sowieso nur zwei Leute drin sitzen.
 
was der aufwand bringen soll.

Es ist ganz normal, seine Anwendung auf das nötige zu reduzieren. Das in diesen Fall das vielleicht schlecht möglich ist aufgrund von Lizenzen und Abhängigkeiten ist wahrschienlich.
Man installiert ja z.B. auch keine Windows mit allen Sprachpaketen.
 
Es ist ganz normal, seine Anwendung auf das nötige zu reduzieren.
Nö, habe ich noch nie gebraucht, werde ich wohl auch nie, ausser ich würde für wirklich kleine Geräte Entwickeln, aber für Desktops/Server diesen Aufwand betreiben um ein paar mikriege MiB zu sparen? Sicherlich nicht...
 
Das stimmt da gebe ich dir recht, wenn man eh nur Dienste oder kleine Anwendung für "Standard-Systeme" schreibt dann lohnt sich der Aufwand wirklich nicht.
 
CK hat gesagt.:
Das stimmt da gebe ich dir recht, wenn man eh nur Dienste oder kleine Anwendung für "Standard-Systeme" schreibt dann lohnt sich der Aufwand wirklich nicht.
Das habe ich nicht gesagt, eigentlich genau das Gegenteil.. :roll:

Was ich meinte:
Ob meine Web/EJB Anwendung 40MiB oder 10 MiB groß ist, macht keinen Unterschied und rechtfertigt nicht im entferntesten so eine Massnahme.

Wenn man aber für embedded Systeme entwickelt, ist es etwas anderes.
 
Es ist ganz normal, seine Anwendung auf das nötige zu reduzieren.
Ne, nicht wirklich. Bei der Installation kann man u.U. optionale Packages ausnehmen (auch z.B. Sprachpakete). Aber alles andere ist nicht sinnvoll.

wenn man eh nur Dienste oder kleine Anwendung für "Standard-Systeme" schreibt dann lohnt sich der Aufwand wirklich nicht.
???:L
 
Es gibt immer ein für und wieder für bestimmte Aktionen.
Speicherplatz ist in bestimmten Fällen ein möglicher Grund. In anderen wieder unwichtig.
Ich bin der Meinung man sollte Resourcen sparen wo es geht.
Man sollte sich damit begnügen das Speicher ja da ist und billig ist.
CPU, RAM Power ist auch da und kostet auch nit mehr so viel, trotzdem optimiert man seine Anwendung.
 
Da gebe ich dir recht, was ich damit nur zum Ausdruck bringen wollten ist das man im Optimalfall auf alle Resourcen achten sollte.
Klar ist die Eine wichtiger als die Andere.

Aber nun denn scheint keiner ne Antwort auf meine Frage zu wissen.
 
CK hat gesagt.:
Es gibt immer ein für und wieder für bestimmte Aktionen.
Speicherplatz ist in bestimmten Fällen ein möglicher Grund. In anderen wieder unwichtig.
Ich bin der Meinung man sollte Resourcen sparen wo es geht.
Man sollte sich damit begnügen das Speicher ja da ist und billig ist.
CPU, RAM Power ist auch da und kostet auch nit mehr so viel, trotzdem optimiert man seine Anwendung.
"Ressourcen" sind vielfältig, die teuerste ist imho immer noch Arbeitszeit, an dieser wird meist gemessen was "viel" und was "wenig" ist.

Wenn du & jeder der die Anwendung wartet/entwickelt/pflegt anfängt die jars zu verkleinern wegen ein paar MiB, kostet das mehr als wenn man sie so nimmt wie sie kommen, aber bestimmt schreibst du ja hauptsächlich Maschinencode, denn Assembler oder gar Hochsprachen, ganz zu schweigen von den OO Sprachen, brauchen ja soviele "Ressourcen"..
 
Eine deiner Bibliotheken verwendet Reflection, eine andere deiner Bibliotheken ist über dependency injection mit einer anderen Gekoppelt. Das sind keine exotischen Fälle, sondern Alltag in moderat komplexen Software Scenarien.
Kein Tool der Welt kann das 100% anayliseren. Das ende vom Lied:
Du wirfst ein paar packages weg und 93% deiner Anwendung laufen während 7% mit undefinierbaren Fehlern abschmieren (das passiert dann übrigens nicht bei dir, sondern beim Kunden).

Soetwas tut man nicht, eine Bibliothek ist immer am Stück zu verwenden, wo Granularität sinnvoll ist, kann sich der Entwickler der Bibliothek darum kümmern. Hielt er Granularität für nicht sinnvoll/möglich, solltest du die Entscheidung respektieren.
Festplatte ist wesentlich billiger als der katastrophale Test und Wartungsaufwand einer Anwendung mit partiellen Bibliotheken die man nicht bis ins allerletzte Detail versteht.
 
Wenn du & jeder der die Anwendung wartet/entwickelt/pflegt anfängt die jars zu verkleinern wegen ein paar MiB
Deswegen ja die Frage nach den Tool dafür, aber das mit dem Themen wie z.B. Reflection sehr ich ein das ist wirklich kaum machbar.

Soetwas tut man nicht, eine Bibliothek ist immer am Stück zu verwenden, wo Granularität sinnvoll ist, kann sich der Entwickler der Bibliothek darum kümmern. Hielt er Granularität für nicht sinnvoll/möglich, solltest du die Entscheidung respektieren.
Festplatte ist wesentlich billiger als der katastrophale Test und Wartungsaufwand einer Anwendung mit partiellen Bibliotheken die man nicht bis ins allerletzte Detail versteht.
Das sehe ich ein.

aber bestimmt schreibst du ja hauptsächlich Maschinencode, denn Assembler oder gar Hochsprachen, ganz zu schweigen von den OO Sprachen, brauchen ja soviele "Ressourcen"..
Wenn du das sagst. 😎
Wollte wie schon ein paar mal gesagt mein Produkt soweit wie möglich optimieren.
Da dies in dem Fall mit den Libraries nicht ohne riesigen Aufwand möglich werde ich sie
so belassen.
War ja nur mal ein Ansatz auch an weiteren Stellen seine Software zu optimieren.
 
Und in der Luft- und Raumfahrt zählt jedes Gramm, aber was hat das mit SW Entwicklung zu tun?

Performance und Speicherverbrauch sind schon lange nicht mehr die wichtigsten Faktoren bei SW.
 
Interessante Einstellung. Das können auch nur Leute sagen, die unter Windows-Systemen groß geworden sind, wo für Microsoft Codegröße und Speicherverbrauch immer nur letztrangig waren. Dann bekommt man Systeme wie Vista, die bald 40 Mio. Codezeilen haben, wohingegen sich Linux mit 8 begnügt ...

Wer seinen Kunden riesige Programme zumutet (und seinen Kollegen, die sich dort zurechtfinden müssen), hat eine der elementaren Regeln der Softwareentwicklung nicht begriffen. Nur weil Speicher (zur Zeit) billig ist, werde ich Kunden keine Software zumuten, die Hunderte MB Speicher verbraucht, weil der Entwickler zu faul war, nur dass Sinnvolle zu compilieren.

Auf die Eingangsfrage ist bisher auch keiner konkret eingegangen. Ich selbst kenne kein solches Tool.
 
Interessante Einstellung. Das können auch nur Leute sagen, die unter Windows-Systemen groß geworden sind, wo für Microsoft Codegröße und Speicherverbrauch immer nur letztrangig waren. Dann bekommt man Systeme wie Vista, die bald 40 Mio. Codezeilen haben, wohingegen sich Linux mit 8 begnügt ...
Bin Linux Nutzer, vertrete die Einstellung aber trotzdem

Auf die Eingangsfrage ist bisher auch keiner konkret eingegangen. Ich selbst kenne kein solches Tool.
Bin auf die Eingangsfrage eingegangen und meine deutlich gemacht zu haben warum ein solches Tool nie wirklich funktionieren kann.

Idealismus gut und schön, aber auch die Realität sollte man nicht aus den Augen verlieren.
 
scooterJava hat gesagt.:
Auf die Eingangsfrage ist bisher auch keiner konkret eingegangen.
Klar. Aufgrund von Reflection (und Bytecode-Instrumentation) kann es ein solches (einwandfrei funktionierendes) Tool nicht geben.
 
scooterJava hat gesagt.:
Interessante Einstellung. Das können auch nur Leute sagen, die unter Windows-Systemen groß geworden sind, wo für Microsoft Codegröße und Speicherverbrauch immer nur letztrangig waren. Dann bekommt man Systeme wie Vista, die bald 40 Mio. Codezeilen haben, wohingegen sich Linux mit 8 begnügt ...

Wer seinen Kunden riesige Programme zumutet (und seinen Kollegen, die sich dort zurechtfinden müssen), hat eine der elementaren Regeln der Softwareentwicklung nicht begriffen. Nur weil Speicher (zur Zeit) billig ist, werde ich Kunden keine Software zumuten, die Hunderte MB Speicher verbraucht, weil der Entwickler zu faul war, nur dass Sinnvolle zu compilieren.

Auf die Eingangsfrage ist bisher auch keiner konkret eingegangen. Ich selbst kenne kein solches Tool.
Du hast den Thread offensichtlich gar nicht gelesen.

Interessante Einstellung trotzdem deinen sinnfreien Senf dazuzugeben....
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben