2016-08-03 20 views
3

Ich sortierte meine Abhängigkeiten in build.gradle in alphabetischer Reihenfolge, nach denen ich schnell bemerkte, dass meine Spring-Anwendung nicht mehr richtig funktioniert (es hält mit der Nachricht java.lang.NoSuchMethodError: javax.servlet.ServletContext.getClassLoader() beim Start). Wenn ich die Sog-Abhängigkeit von der Mitte nach oben verschiebe, dann funktioniert alles wie vorher.Gradle: Wie unterscheidet sich die Reihenfolge der Abhängigkeiten?

Wie beeinflusst die Abhängigkeitsreihenfolge die Art und Weise, wie die Anwendung ausgeführt wird? Was ist die vorgeschlagene Reihenfolge?

+0

Zu einer verwandten Anmerkung, Grails 3.3.1, wenn Sie diese Zeilen in build.gradle alphabetisch sortieren: anwenden Plugin: "Eclipse" | Plugin anwenden: "Idee" | Plugin anwenden: "Krieg" | Plugin anwenden: "org.grails.grails-web" | Plugin anwenden: "Asset-Pipeline" | Wenden Sie plugin: "org.grails.grails-gsp" dann die Anwendung auf Tomcat, es schlägt mit der Nachricht fehl: javax.servlet.ServletException: Konnte die Sicht mit dem Namen '/ index' im Servlet mit dem Namen 'grailsDispatcherServlet' nicht auflösen –

Antwort

3

Es hat einen Einfluss auf den Klassenpfad der Anwendung. Es gibt wahrscheinlich eine ältere Version der Servlet-Spezifikation oberhalb der Abhängigkeitsabhängigkeit. Dieser answer erklärt, warum dieser bestimmte Fehler für ältere Servlet-Spezifikation auftritt.

+0

Es bedeutet, dass die oben stehenden Abhängigkeiten Vorrang vor den unten stehenden haben? Was ist bei Übergangsabhängigkeiten von Über- und Unterabhängen der Fall? –

+0

Ja, die erste Klasse, die mit dem FQN übereinstimmt, wird in der Reihenfolge der Klassenpfaddeklaration geladen (die mit der Reihenfolge der Abhängigkeiten erstellt wird). Für Übergangsabhängigkeiten wird es wahrscheinlich nach den übergeordneten Abhängigkeiten im Klassenpfad hinzugefügt. Sie sollten die Protokollierung erhöhen, um den Klassenpfad anzuzeigen (Option -cp in der Java-Befehlszeile). –