Ich habe eine JAR-Datei, die eine Anwendung sowie Konfigurationsdateien für diese Anwendung enthält. Die Anwendung lädt Konfigurationsdateien aus dem Klassenpfad (unter Verwendung von ClassLoader.getResource()
), und ihre Abhängigkeiten werden vollständig mit den in die JAR-Datei integrierten Konfigurationsdateien erfüllt.Kann ich den Klassenpfad zum Überschreiben einer Datei in einem ausgeführten jar verwenden?
Gelegentlich möchte ich, dass die Anwendung mit einer etwas anderen Konfiguration ausgeführt wird (speziell möchte ich die JDBC-URL überschreiben, um auf eine andere Datenbank zu verweisen), also erstelle ich eine neue Konfigurationsdatei, speichere sie in der richtigen Verzeichnisstruktur (was bedeutet, in einem Verzeichnis /config
einen classpath-Eintrags), und ich möchte etwas tun:
java -cp new-config:. -jar application.jar
Aber ich kann den classpath den new-config
Pfadeintrag vor der Anwendung JAR Inhalt zu haben, nicht bekommen. Ist es hart codiert, dass der Inhalt der JAR immer der erste Teil des Klassenpfads ist?
Haben Sie versucht, die Config außerhalb de Glas setzen, in einem eigenen JAR-Datei in einem Pfad relativ zum application.jar (../conf/config.jar)? Wenn Sie dies tun, können Sie den Klassenpfad auf das Konfigurations-JAR im App-Manifest setzen, und Sie können die neue Konfiguration festlegen, indem Sie die Datei config.jar ändern. Ich wünschte, ich hätte mehr Zeit, um eine Demo zu machen, um meine Antwort zu bestätigen, aber ich kann nicht ... also schrieb ich es als Kommentar – JuanZe
Sie meinen, statt in der JAR? – Guss
ja, anstatt in das gleiche Glas wie die Anwendung, setzen die Konfig in einem zweiten Glas ... – JuanZe