Überschreiben einer class-Datei aus einer JAR-Bibliothek in einer Java web-app
In meinem Java-web-app, ich habe diese Dateien:
/WEB-INF/classes/com/example/Foo.class
/WEB-INF/lib/example.jar <-- contains the class "com.example.Foo"
Wird die Klasse definiert, in der classes
Verzeichnis verwendet werden, anstelle der Klasse definiert, in example.jar
?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hängt die Antwort auf Ihre container, ist es der container abhängig. Allgemein /WEB-INF/classes ist die bevorzugte Klassen in einer jar-Datei im WEB-INF/lib.
Für Tomcat, die Bestellung ist folgende:
Daher, aus der Perspektive einer web-Anwendung, Klasse oder Ressource laden sieht in der folgenden repositories, in dieser Reihenfolge:
Aber wenn Sie einen anderen container Sie benötigen, konsultieren Sie die Dokumentation für diesen server.
example.jar
Einfuhren Foo.class laden Foo.class inweb-inf/classes
? Denn das klingt nicht richtig, und es würde eine Einschränkung der Sicherheit bin ich mir sicher.example.jar!/com/example/Bar.class
laden Foo.class inexample.jar/com/example/Foo.class
Also es gibt nur einen Weg, das herauszufinden. Ich schrieb einen test 🙂
Meine Erkenntnis war, dass in
TestFoo.java
DruckeUnd für
TestFooInWeb.java
DruckeBeide tests haben dies in der test-Klasse:
Damit alle am Ende, ich stehe korrigiert. Sie apprantly laden kann, eine völlig andere Klasse und alle Jar-Dateien verwenden die neue Klasse. Dies macht Sinn, da die
ClassLoader
wird einen ersten Blick auf das classes-Verzeichnis. Ich bin nicht sicher, ob ich Stimme mit ihm, denn es klingt verdächtig und ich kann es überschreiben Sicherheits-Klassen.java.lang.String
Klasse und müssen es tun, etwas böses. Btw, was sind diese ".iml" - Dateien??