Ausgabe
Ich migriere ein altes Projekt mit mehreren Modulen. Ich kann nicht migrieren, da es viele Abhängigkeiten gibt, also mache ich eine einzelne Migration, in der Hoffnung, dass es einfacher sein wird.
Ich habe Spring-boot auf Version 2.4.3 aktualisiert und erhalte ständig diese Fehler:
Verursacht durch: org.springframework.context.ApplicationContextException: Webserver konnte nicht gestartet werden; Die verschachtelte Ausnahme ist org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen der Bean mit dem Namen „JettyServletWebServerFactory“, definiert in der Klassenpfadressource [org/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedJetty.class]: Bean-Instanziierung über Factory Methode fehlgeschlagen; verschachtelte Ausnahme ist org.springframework.beans.BeanInstantiationException: Fehler beim Instanziieren [org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory]: Factory-Methode ‘JettyServletWebServerFactory’ hat eine Ausnahme ausgelöst; Die verschachtelte Ausnahme ist java.lang.NoClassDefFoundError: org/eclipse/jetty/server/session/SessionDataStore unter org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.
Meine Version des Stegs ist 9.2.28.v20190418.
Ich zerbreche mir den Kopf und versuche, dieses Problem zu lösen, habe aber keine Fortschritte gemacht.
Wie kann ich es lösen?
AKTUALISIEREN:
Ich habe versucht, Spring Boot auf 2.3.3.RELEASE herunterzustufen, ich habe versucht, alle Jetty-Komponenten auf 11.0.1 zu aktualisieren, kein Unterschied. Es kommt zu weniger eindeutigen, eher marginalen Fehlermeldungen.
UPDATE 2:
Wenn ich die Spring Boot App selbst starte, bekomme ich eine Meldung:
Beschreibung:
Es wurde versucht, eine nicht vorhandene Methode aufzurufen. Der Versuch wurde von folgendem Standort aus unternommen:
org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory.configureSession(JettyServletWebServerFactory.java:242)
Die folgende Methode existierte nicht:
'void org.eclipse.jetty.server.session.SessionHandler.setMaxInactiveInterval(int)'
Die Klasse der Methode, org.eclipse.jetty.server.session.SessionHandler, ist an den folgenden Orten verfügbar:
jar:file:/Users/dmytro/.m2/repository/org/eclipse/jetty/jetty-server/9.2.28.v20190418/jetty-server-9.2.28.v20190418.jar!/org/eclipse/jetty/server/session/SessionHandler.class
Ich kann immer noch nicht verstehen, wie ich es lösen soll, da ich vorher nicht Jetty
zu viel gearbeitet habe, aber es sieht nach etwas aus.
UPDATE 3:
Nach endlosen Stunden des Debuggens habe ich herausgefunden, dass der Konflikt zwischen wiremock:2.27.2
und entsteht spring-boot:2.4.3
. Beide hängen von inkompatiblen Versionen von jetty
, jetty:9.2.28.v20190418
und ab jetty:9.4.38.v20210224
.
Das Problem ist, dass ich den Wiremock nicht entfernen kann. Ich kann Spring Boot nicht downgraden, da Wiremock hinterherhinkt. Welche anderen Alternativen habe ich?
UPDATE 4: Ich habe ein Problem auf GitHub
gepostet . Ich hoffe, es besteht keine Notwendigkeit, den Wiremock zu patchen oder die Testcodebasis neu zu schreiben.
Lösung
Auf das Jetty Github-Problem habe ich eine Antwort erhalten, die mein Problem mit der Verwendung von gelöst jetty-bom
hat, sodass ich mich jetty
um sich selbst kümmern kann:
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-bom</artifactId>
<type>pom</type>
</dependency>
Bei mir hat es reibungslos funktioniert.
AKTUALISIEREN:
Es funktionierte nahtlos, bis ich es tat mvn clean install
, also eine weitere Abhängigkeit, die in meinem Fall absolut notwendig ist:
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-jre8</artifactId>
<version>2.27.2</version>
<type>pom</type>
</dependency>
Beantwortet von – Dmytro Chasovskyi
Antwort geprüft von – Senaida (FixError Volunteer)