Wie wird festgelegt man einen benutzerdefinierten WebAppClassLoader in Jetty durch Config?
-
02-10-2019 - |
Frage
Ich versuche, eine Anlegestelle (6.x) WebAppContext mit einer benutzerdefinierten Unterklasse von WebAppClassLoader . In Code (Scala), es ist einfach so:
val context = new WebAppContext()
val cwacl = new CustomWebAppClassLoader(context)
context.setClassLoader(cwacl)
...
Das funktioniert gut, wenn Jetty einzubetten. In der Produktion aber ich implementieren nur eine WAR-Datei zu einem eigenständigen Anlegestelle Beispiel, so gibt es keine Möglichkeit, zu konfigurieren Dinge in Code wie folgt.
Ich kann nicht herausfinden, wie die gleiche Sache über Jetty Konfigurationsdateien zu tun. Jede Hilfe ist willkommen.
Bonus: Wie würden Sie configure Maven-Anlegestelle-Plugin die CustomWebAppClassLoader zu verwenden:)
Lösung
Sie können die Kontextkonfigurationsdateien verwenden. Es gibt Beispiele in dem contexts/
Verzeichnis.
Dies würde etwas in diese Richtung sein:
<Configure id="mycontext1" class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="classLoader">
<New class="f.q.n.CustomWebAppClassLoader">
<Arg><Ref id="mycontext1"/></Arg></New>
</Set>
</Configure>
(Siehe Jetty XML Syntax Konfiguration Referenz für weitere Details.)
Andere Tipps
Als Alternative einer Kontextkonfigurationsdatei zu verwenden, können Sie die Klassenlader Attribute in der pom.xml-Datei festgelegt, für Anlegesteg> = 8.x z.B. jede Klasse innerhalb WEB-INF wenn nicht nach schneller starten:
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
<webApp>
<webInfIncludeJarPattern>^$</webInfIncludeJarPattern>
</webApp>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
</configuration>
</plugin>
</plugins>
Referenz: Jetty Plugin Webapp Konfiguration