Verwaltung mehrerer Jar-Versionen: Classloader und Classloading
In der Java-Entwicklung die Verwaltung mehrerer Versionen desselben Jars oder Projekts innerhalb einer einzigen Anwendung kann eine Herausforderung darstellen. Diese Frage befasst sich mit der Funktionsweise von Klassenladern und wie sie in diesem Szenario navigieren.
Wie Klassenlader mit mehreren Jar-Versionen umgehen
- Klassenlader erstellen separate Instanzen für jedes Glas. Stellen Sie sicher, dass die Klassen in jedem Glas isoliert sind.
- Wenn mehrere Gläser dieselbe Klasse enthalten, wird die erste geladene Instanz verwendet. Die Reihenfolge des Ladens wird durch den Klassenpfad bestimmt.
- Innerhalb eines einzelnen Klassenladers müssen Klassen eindeutige Binärnamen haben. Verschiedene Klassenlader können jedoch Klassen mit demselben Binärnamen ohne Konflikte laden.
Ladeverhalten von Klassenladern
- Klassenlader folgen normalerweise einer hierarchischen Struktur mit dem Bootstrap-Klassenlader als Root.
- Wenn eine Klasse angefordert wird, ist der spezifischste Klassenlader aufgerufen. Wenn die Klasse nicht gefunden werden kann, delegiert sie an den übergeordneten Klassenlader.
- Klassenlader mischen Klassen aus verschiedenen JARs nicht willkürlich. Wenn eine Klasse aus einem Glas geladen wird, verwenden nachfolgende Klassenladungen innerhalb desselben Klassenladers dieses Glas ebenfalls.
Lösung des Problems
-
Verwenden Sie Maven oder Gradle: Abhängigkeitsmanagement-Tools wie Maven oder Gradle können Abhängigkeitskonflikte automatisch lösen und eine konsistente Version bereitstellen jars.
-
Separate Klassenlader verwenden: Durch manuelles Erstellen separater Klassenlader für verschiedene Sätze von Gläsern können Abhängigkeiten isoliert und das Laden von Klassen gesteuert werden.
-
Benutzerdefinierter Klassenlader: Die Implementierung eines benutzerdefinierten Klassenladers kann eine fein abgestimmte Kontrolle über das Laden von Klassen ermöglichen. Dies ist jedoch ein komplexer und fortgeschrittener Ansatz.
Tricks zum „Einbinden“ von Gläsern
-
Verschachtelte Gläser: Erstellen ein einzelnes Glas, das alle erforderlichen Gläser enthält. Dadurch wird sichergestellt, dass der Klassenlader alle Komponenten als eine Einheit behandelt.
-
Versionsnotation: Ändern Sie die Binärnamen von Klassen in verschiedenen JAR-Versionen, um Eindeutigkeit sicherzustellen. Dadurch können mehrere Versionen derselben Klasse innerhalb desselben Klassenladeprogramms vorhanden sein. Allerdings kann es zu Laufzeitkonflikten kommen.
Das obige ist der detaillierte Inhalt vonWie verwalten Java-Klassenlader mehrere Versionen derselben JAR?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!