Search the FirstSpirit Knowledge Base
Hallo,
gibt es eine Version, die keine Klassen von log4J in org.slf4j (Datei fs-webrt.jar) mit liefert, da wir in unseren Modulen andere Versionen mitliefern?
Vielen Dank im Voraus!
Dirk
Hallo Dirk,
das sollte möglich sein, wenn du den scope der resource auf "module" setzt. Also einfach eine andere Version von log4j als Resource in der module.xml definieren.
Viele Grüße
Christoph
Hallo Christoph,
kann es dann nicht zu einem Problem kommen, wenn wir gegen Version X von slf4j kompilieren, aber das mit Version Y ausgeliefert wird?
Viele Grüße
Elmar
Hallo Elmar,
ich verstehe die Frage nicht ganz. Wenn du log4j als Resource im Modul angibst, musst du das log4j-Jar auch mit in das Modul packen. Da nimmst du die Version, die du haben willst.
Viele Grüße
Christoph
Hallo Christoph,
auf dem FS Server funktioniert das auch soweit. Wenn Du aber daraus eine WebApp machst und das auf einen Server installierst hast Du ein Versionsproblem - in dem war File befinden sich dann zwei verschiedene log4j bzw slf4j, eine davon "versteckt" in dem fs-webrt.jar, was natürlich zu Problemen führt. Lassen wir nun unsere slf4j jars weg, knallt es, weil in dem fs-webrt.jar die falsche Version ist.
Das Problem ist also, was am Schluß über das war File auf dem Tomcat landet, nicht im FS Server.
Viele Grüße
Elmar
Hallo Elmar,
den dezenten Hinweis auf die fs-webrt.jar hatte ich übersehen.
Das mit dem Scope funktioniert natürlich nur bei Modulen, die auf dem FirstSpirit-Server laufen. Die Webapplikationen haben ja nur einen Classpath und zumindest bei der Verwendung des internen Jetty wird das fs-webrt-jar gewinnen. In dem Fall bleibt euch nur kompatibel zur mitgelieferten Log4J bzw. slf4j Implementierung zu bleiben. Auf das fs-webrt.jar werdet ihr ja wahrscheinlich nicht verzichten können.
Viele Grüße
Christoph
Hallo Christoph,
das ist wahr, auf das mitgelieferte fs-webrt.jar können wir nicht einfach verzichten. Gibt es eine Liste von Klassen bzw. deren Versionen, die in diesem jar mit geliefert werden?
Vielen Dank im Voraus!
Dirk
Würde mich ebenfalls interessieren, Danke.
Gruß
David
Hallo zusammen,
Abhilfe könnte das Shade-Plugin von Maven liefern. Damit ist es möglich Klassen zu "relocaten", d.h. ihren Klassenpfad zu ändern. Z.B. von "com.foo.bar" auf "com.shaded.foo.bar". Somit können Classloading-Konflikte, wie der oben beschriebene, vermieden werden.
https://maven.apache.org/plugins/maven-shade-plugin/examples/class-relocation.html
Eine Auflistung von allen Klassen inkl. Version die in den einzelnen FS-Jars enthalten sind gibt es meines Wissens nach nicht. Für dieses "Feature" gibt es allerdings schon einen Feature-Request, für den gerne gevoted werden darf :
https://community.e-spirit.com/ideas/1575
Grüße
Sandro