Ich verwende Netbeans 8.2, um Spring-Anwendungen zu entwickeln. Diese spezielle App, mit der ich Probleme habe, ist eine Spring Boot 1.5.3 App. Ich habe eine Spring-XML-Datei und eine application.properties, die ich in/config im Stammverzeichnis des Projekts aufbewahre.Spring Boot fügen Dateien zu Klassenpfad von der Befehlszeilenausführung
Ich übermittle die Spring-XML-Datei an mein Projekt über die @ImportResource
Annotation und eine Werteigenschaft wie @ImportResource(value="${config.xmlfile}")
.
Wenn ich in Netbeans auf die Schaltfläche "Projekt ausführen" klicke, wird meine Spring App gestartet und die Datei application.properties im Ordner/config korrekt gefunden. Alle Klassenpfadverweise auf andere Dateien in diesem Ordner gehen jedoch verloren. Wenn Sie beispielsweise die Datei config.xml auf classpath:config/file.xml
oder classpath:file.xml
festlegen, kann die Datei nicht gefunden werden, aber file:config/file.xml
funktioniert.
Wenn in ähnlicher Weise von der Kommandozeile ausgeführt habe ich folgendes als meine Struktur:
app/
|-- bin
| `-- app-run.sh
|-- config
| |-- application.properties
| |-- log4j2.xml
| |-- file.xml
`-- app-exec.jar
Ich bin die spring-boot-maven-plugin
mit dem Glas zu machen, wie folgt:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
</configuration>
</execution>
</executions>
</plugin>
und meine app- run.sh Skript führt die folgenden:
exec /bin/java -cp :.:../config/*:../app-exec.jar
-Dlogging.config=../config/log4j2.xml
-Dspring.config.location=../config/application.properties
-jar ../app-exec.jar
wo/bin/java Repres Gibt den Ort an, an dem ich Java installiert habe. Der Klassenpfad in -cp scheint hier nicht zu funktionieren. Ähnlich wie beim Ausführen der IDE kann die Datei config.xml nicht in classpath: config/file.xml oder classpath: file.xml gefunden werden, aber die Datei: ../ config/file.xml funktioniert.
Ich würde gerne in der Lage sein, den Klassenpfad sowohl in der IDE und von der Befehlszeile aus zu setzen, so dass ich im Frühling mit Klassenpfad Verweis auf Dateien zugreifen kann, um Dinge einfacher zu machen. Ich möchte sie nicht alle in src/main/resources
setzen und sie in das Glas verpackt haben, wie ich diese nach dem Verpacken und der Bereitstellung bearbeiten muss.
Hat jemand irgendwelche Ideen oder hilfreiche Hinweise? Danke im Voraus!
Danke für die detaillierten Notizen. Es funktioniert, nachdem ich den Speicherort von -Downloader.path in dem Befehl geändert habe. – Silentbang
@Silentbang froh, dass diese Antwort geholfen hat, nahm mich ein bisschen, um die Dinge herauszufinden. Die Dokumentation zu diesem Themenbereich von Spring war anständig, aber es kam an einigen Stellen zu Konventionen, wie man den Pfad bei der Übergabe an '-Dloader.path' festlegt – wrslatz