Wie kann ich das überschreiben einer Klasse mit einem separaten jar?
Eines Kunden erfordert eine Vorschau auf ein neues feature unseres Produkts. Sie forderte, dass die Funktion geschickt, um Sie in eine jar-Datei (wie ein Pflaster). Es gibt kein problem mit der Einbeziehung der neuen Klassen in Sprach-jar-Datei. Jedoch, eine vorhandene Klasse geändert wurde, die erforderlich ist, um die Integration der neuen Funktion. Sie wollen einfach nur, um dieses neue jar-Datei, die zimmerreserviereung, ohne das update der core-Klassen von unserem Produkt. Die Frage ist also: ist es möglich, das überschreiben einer bereits vorhandenen Klasse mit einem separaten jar? Wenn ja, wie?
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine chance es wird funktionieren, wenn Sie die neue jar-Datei zuvor in den classpath als das original Glas. Es ist einen Versuch Wert, obwohl es immer noch klingt wie ein Rezept für eine Katastrophe - oder zumindest wirklich schwer zu Debuggen Probleme, wenn irgendwie beide Klassen geladen werden.
EDIT: ich hatte geplant, dies zu schreiben, etwas früher, bekam aber unterbrochen durch das Ende der Reise mit einem Zug...
Ich würde gehen Sie zurück zu dem Kunden und erklären, dass, während das, was Sie Fragen ist möglich, es kann zu unvorhergesehenen Problemen führen. Aktualisierung der jar-Datei ist eine viel sicherere fix, mit viel weniger Risiko. Die Sätze "unerwartete Probleme" und "Risiko" sind wahrscheinlich die Alarmglocken auslösen mit dem Kunden, so hoffnungsvoll Sie ' ll lassen Sie das richtige tun.
Ja und Nein, es hängt von Ihrer Umgebung ab.
Wenn Sie zum Beispiel OSGi und haben Ihre Versionen unter Kontrolle, es ist nur eine Frage der Installation einer neuen bundle mit der exportierten Pakets auf eine höhere version (vorausgesetzt, Ihre version reicht, werden die nachsichtig genug).
Wenn Sie verwenden plain old Java mit keine Lust benutzerdefinierte Klasse laden, sollten Sie gut zu gehen, setzen Sie es zuvor auf dem class-path (wie andere bereits erwähnt).
Wenn Sie benutzerdefinierte Klasse laden, müssen Sie sicherstellen, dass alle Klassen, die Ihre 'gepatcht' Klasse braucht, und in der Tat die gesamte transitive Abhängigkeit Rumpf, sichtbar ist von der class loader lädt die gepatchte version, die bedeuten könnte, die Sie versenden müssen, die gesamte Anwendung, schlimmsten Fall.
Alle Antworten, die festlegen, setzen Sie die aktualisierten Klassen, bevor diejenigen, die Sie ersetzen in den classpath korrekt sind, nur das original GLAS ist nicht gesiegelt oder unterzeichnet.
Ja, es kann möglich sein, indem man es früher auf dem classpath als der ursprüngliche Topf. Jedoch, unter Berufung auf die Reihenfolge der classpath ist nicht immer zu Glück führen. Ich bin mir nicht sicher, ob es auch dokumentiert in der Sprache Java-Spezifikation; wenn nicht, dann ist es zu brechen, für verschiedene JVMs und sogar verschiedene Versionen der gleichen JVM.
Erwägen Sie stattdessen, die Angabe einer realistischen Zeitrahmen, um die Integration der neuen Funktion in die aktuelle Codebasis. Dies ist vielleicht nicht die Antwort, die Sie suchen.
Wahrscheinlich mehr als Sie müssen für diesen speziellen Fall, aber in der Regel, wenn Sie nur wollen zu optimieren oder erweitern Sie eine vorhandene Klasse, die Sie auch verwenden können, AspectJ mit load-time-weaving.