In einer Testumgebung versuche ich, einen eingebetteten Jetty mit einigen Anwendungen auszuführen. Die Anwendung hängt von some-dependency
ab, die eine web-fragemnt.xml
in ihrem Ordner META-INF
angibt. Ich versuche, das Fragment wie folgt zu laden:Laden eines Webfragments beim Ausführen eines eingebetteten Jettys
public static void someMain(...) {
server = new Server(port);
final WebAppContext context = new WebAppContext();
addFragmentIfExists(context);
context.setContextPath("/");
context.setParentLoaderPriority(true);
context.setResourceBase(pathToWebapp);
server.setHandler(context);
}
private void addFragmentIfExists(final WebAppContext context) {
final Optional<URL> url = Stream.of(((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs())
.filter(u -> u.toString().contains("some-dependency")).findFirst();
url.ifPresent(u -> {
try {
context.getMetaData().addFragment(newResource(u),
newResource(new File(u.getPath(), "META-INF/web-fragment.xml")));
} catch (Exception e) {
...
}
});
}
beim Debuggen kann ich das Fragment sehen unter server.handler.metadata.webFragments{Roots,NameMap,ResourceMap}
geladen, aber unter server.handler.{filters,servlets}
Ich sehe nicht, den Filter und Servlets in diesem Fragment erklärt Was soll ich tun falsch? Gibt es auch einen weniger hacky Weg, um das Fragment zu laden? Ich habe auch ein Spring-Web-Fragment im Classpath, wenn ich gerade versuche, aus dem Klassenpfad lädt die
Danke, ich werde es versuchen, ich bin nicht sicher, warum sollte die Konfigurationsklassen geändert werden, ihre sowieso alle geladen, gibt es neue Klassen hier drin? Auch diese Lösung ist nicht allgemein genug, da das Jar bereits in diesem Verzeichnis in diesem Verzeichnis ist, aber beim Ausführen eines Tests in der IDE ist das Fragment in einem Klassenverzeichnis in einem Zielordner des Abhängigkeitsprojekts – sagioto
Ich verwende Jetty : '8.1.5.v20120716' Ich habe diese Konfigurationsklassen nicht in meinem Klassenpfad – sagioto