2017-09-19 1 views
0

Mein Problem hier beschriebenen ähnlich ist (I außer Kraft setzen nicht Classpath explizit): Spring application.yml not detected when running with -classpathFrühling JarLauncher laden application.yml nicht aus der Abhängigkeit

Ich habe eine SpringBoot Anwendung produzieren ausführbare app.jar mit Umpackziel gebaut. Ich habe application.yml im Stammkontext von backend.jar, die eine Abhängigkeit von app.jar ist. Ich kann die App erfolgreich von IDEA über Mainclass laufen:

SpringApplication.run(MyApp.class, args); 

ich die App erfolgreich vom Terminal laufen kann:

java -jar app.jar 

schlägt jedoch fehl, die Anwendung von application.yml zu konfigurieren, wenn ich es laufen lokal als CloudFoundry tut:

unzip app.jar 
java org.springframework.boot.loader.JarLauncher 

Frühling werden statische Inhalte booten und liefern aber bei f scheitern erster Versuch, auf alles zuzugreifen, was Daten von der Konfiguration erfordert.

Ich habe die Dokumentation gelesen und kann nicht herausfinden, was mit dem Klassenpfad nicht stimmt. Von MANIFEST.INF nehme ich an, java-jar app.jar führt die gleiche Klasse wie ich im dritten Beispiel oben.

Danke für Ideen.

Antwort

0

Dies erwies sich als Klassenpfad Problem (duh!).

Wir hatten eine 'vergessene' leere application.yml in Abhängigkeit Y und eine tatsächlich gültige application.yml in unserer Abhängigkeit X. Ähnlich wie bei den Klassen wird nur das erste Vorkommen der Ressource auf classpath vom Klassenlader geladen.

Nach der Aktivierung der Feder Debug-Protokollierung und Prüfung ClasspathLoggingApplicationListener Ausgang kann man sehen, dass die Classpath Reihenfolge der Abhängigkeiten innerhalb fatjar ist unterschiedliche für die Anwendungsfälle in Frage beschrieben.

Für java -jar verschachtelten JAR um gehasht zu sein scheint. Für JarLauncher ist es alphabetisch.

Vorhandene Anfrage, um dies einheitlich zu machen: https://github.com/spring-projects/spring-boot/issues/9128

Verwandte Themen