2009-09-17 2 views
5

Ich arbeite gerade an einer Anwendung, die etwa ein Jahrzehnt alt ist. Als ich mir die JAR-Dateien anschaute, die mit der Anwendung verknüpft sind, kann ich viele nicht benötigte JAR-Dateien und viele verschiedene Versionen derselben JAR-Datei sehen.Unerwünschte JAR-Dateien in tomcat/lib oder WEB-INF/lib

Was sind die Nachteile von unerwünschten Gläsern in lib. Was ist der einfache Weg, sie zu finden und zu entfernen?

+0

Ich denke, du meintest "Nachteile" nicht "Crons". Entschuldigung, noch keine Bearbeitungsberechtigungen. – DVK

+0

geändert! und alles Gute, um es bald zu bekommen! – Umesh

Antwort

8

Sie können Probleme bekommen, wenn ein Klassenlader entscheidet, Klassen aus einer anderen Version der JAR-Datei als erwartet zu laden. Diese Art von Problemen sind normalerweise schwer zu verfolgen. Der Server durchsucht jars in einer bestimmten Reihenfolge (alphabetisch nach Dateiname?) Und verwendet die erste übereinstimmende Klasse/Ressource, die er findet. Es gibt wahrscheinlich keine Garantie, dass die neueste Version einer JAR-Datei zuerst betrachtet wird.

Ich kenne keine Werkzeuge, die herausfinden würden, welche Gläser unbenutzt sind. Dies kann im allgemeinen aufgrund von Reflektion unmöglich sein, aber zumindest theoretisch sollte ein gewisses Maß an automatischer Überprüfung möglich sein.

Das Entfernen unbenutzter JAR-Dateien durch Versuch und Irrtum ist problematisch, wenn Sie keine guten Komponententests haben, von denen ich bezweifle, dass Sie sie in Ihrer jahrzehntelangen Anwendung haben. Es kann immer einen seltenen Fehler geben, der nur von der alten jar-Version abhängt, die Sie gerade entfernt haben.

+0

Ok cool .. Danke. – Umesh

0

Mit unerwünschten JAR-Dateien in Ihrer Anwendung meinen Sie, dass diese jedes Mal als Teil Ihres Kompilierungs- und Buildprozesses generiert werden? Wenn dies der Fall ist, könnten es die Build-Skripts sein, die Sie bereinigen möchten.

Wenn Sie sich auf die tatsächliche Implementierungsumgebung beziehen, müssen alle Bereinigungen sehr sorgfältig durchgeführt werden. Warum nicht in einer neuen Testumgebung mit einer sauberen Tomcat-Installation neu starten und die ausführbaren Dateien der neuesten Builds bereitstellen? Sehen Sie, ob es gut läuft, und wenn ja, dann sind die zusätzlichen Gläser vielleicht überflüssig.

Was die Nachteile betrifft, sehe ich nichts abgesehen von der Dateigröße Ihrer Bereitstellung.

+0

was ich mit unerwünschten Gläsern meinte, ist jtds1.2.jar und jtds1.2.2.jar ist dort, wo 1.2 nicht benutzt wird. Wir verwenden jtds Art der Verbindung für die letzten sechs Monate. Aber es enthält immer noch die mssql.jar etc .. die vorher benutzt wurden. Es werden keine Dateien als Teil von Kompilieren/Erstellen generiert. – Umesh

0

Wie können Sie entscheiden, welche der Gläser nicht tatsächlich verwendet werden?

Ich würde vorschlagen, dies eine vollständige QA-Änderung zu machen. Sie haben keine Ahnung, ob der Code, der aus dem Satz von Gläsern ausgewählt wurde, eine fehlerhafte Implementierung überschattet, wenn Sie ein "veraltetes" Glas entfernen.

1

Mein Vorschlag ist, dass, wenn Ihre Anwendungen funktionieren, verlassen Sie die Gläser wie sie jetzt sind. Es wird sehr mühsam, wenn nicht unmöglich herauszufinden, welche JAR-Dateien tatsächlich vom Klassenlader aufgenommen werden. (Natürlich keine neuen Anwendungen bereitstellen).

Sie können die Pakete finden, die eine JAR-Datei enthält, indem Sie JarAnalyzer verwenden. Dadurch erhalten Sie eine Vorstellung von Duplikaten und können ältere Versionen von JAR-Dateien entfernen. Jedoch muss dieses Verfahren von Hand und durch Versuch und Irrtum durchgeführt werden. Außerdem kann dasselbe Paket in zwei Gläsern mit unterschiedlichen Namen und Versionsinformationen enthalten sein.

Wie schon gesagt, verschiedene Versionen des gleichen Glases könnte Chaos bringen. Sie können nicht wissen, welche Version tatsächlich verwendet wird und welche Konflikte diese Version für diese oder eine andere Anwendung mit sich bringt. Deshalb sollten Sie niemals den freigegebenen Ordner von Tomcat für Anwendungs-Jars verwenden. Wenn Sie sich in einer Situation befinden, in der viele JAR-Dateien im freigegebenen Ordner abgelegt sind, vermeiden Sie die Verwendung dieses Servers für neue Anwendungen.

+0

Jetzt habe ich nur eine Anwendung unter dem Tomcat laufen. Aber der Grund für die Aufnahme von Gläsern in Tomcat freigegebenen Pfad ist, einige Gläser Tomcat wird nicht nehmen, während in der Anwendung lib. Beispiel: jtds.jar, mysql v 5.4 jar. Wenn Sie diese JAR-Dateien in die Anwendungsbibliothek laden und versuchen, eine Verbindung zur Datenbank herzustellen, wird eine Ausnahme ausgelöst. (Es funktionierte nie für mich. Für eine Lösung, ich kopierte es in tomcat lib und es begann zu arbeiten.) – Umesh

+0

Wenn Sie eine JNDI-Ressource verwenden, um eine Datenquelle zu konfigurieren, dann muss die jdbc-Connector im freigegebenen Ordner sein JAR-Datei ist vorhanden, bevor Ihre Anwendung gestartet wird. Dies ist eine Ausnahme von der Regel. Legen Sie keine JAR-Dateien in den freigegebenen Ordner, es sei denn, dies ist absolut notwendig. – kgiannakakis