Java-jar : Zugriff auf externe Konfigurationsdatei
Ich bin auf der Suche nach etwas, was ich dachte, war nicht zu schwierig sein.
Ich habe eine Anwendung, die ich möchte zu Verpacken, als ein Glas, da habe ich ~30 Abhängigkeiten und ich möchte in der Lage sein, um die Bereitstellung einer einzigen Datei.
Habe ich ein paar Konfigurations-Dateien - properties-Datei und einer spring-Konfigurationsdatei, und meine log4 props - Datei, die ich haben möchte, die externe jar. Ich denke, ich erwartet, dass wenn ich Sie im selben Verzeichnis wie die jar-es würde Sie finden, wenn er lief, aber es funktioniert nicht.
Während der Entwicklung, ich habe diese Dateien in die root des classpath für mein eclipse-Projekt und die app findet Sie Prima. Ich fühle mich wie ich ' m fehlen einige wichtige Aspekt der jar /classpath Theorie...
also, was ich will, ist in der Lage, die config-Dateien und die jar im selben Verzeichnis und haben die app finden, die config-Dateien, wenn ich es mit dem standard-java -jar-Ding.
Ist es nicht eine einfache Möglichkeit, dies zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Will ich bewahren, für die Nachwelt meine Lösung für dieses problem.
Ich denke, es ist möglich, dass ich erwartete java-jar etwas zu tun es nicht tun.
Wenn Sie in der normalen java-Befehl können Sie das jar in den Klassenpfad und Sie werden am Ende mit ziemlich viel die gleiche Sache wie java-jar, nur müssen Sie speziell den Namen der Klasse, die Sie verwenden möchten. Es sieht wie folgt aus:
Chancen sind Sie gehen, um ein Skript erstellen, das Programm zu starten, die für Sie ohnehin, so dass die Komplexität der Kommandozeilen-Aufruf nicht wirklich viel, da Sie nur bauen es mal trotzdem.
Du wirst sehen, ich eingeschlossen '.' als ersten Eintrag im classpath, was bedeutet, dass alles im selben Verzeichnis, wie die jar auf dem Klassenpfad als gut. Natürlich alles innerhalb der jar-Datei enthalten ist, auf die classpath auch, da das Glas selbst ist auf dem classpath zu.
Wirst du auch sehen, dass ich gezeigt habe, wie können Sie immer noch hand in Argumente auf der Befehlszeile. Dies war etwas, was ich war unsicher, wenn ich gestartet, aber es funktioniert wie erwartet.
Ich bin sicher, dies ist nur grundlegende java-Implementierung wissen, aber ich war es fehlt aus irgendeinem Grund.
Ich hoffe, dies hilft jemand anderes. Es würde gespeichert haben mir eine Menge Zeit, wenn jemand in der Lage gewesen zu sagen, "nicht die Mühe zu versuchen, um die -jar-Sache arbeiten - verwenden Sie einfach die cp-Methode"...
Müssen Sie die "." im classpath der jar-Datei, die Sie erstellen für Ihre Anwendung.
So, in der manifest-Datei, die ich erwarten würde, um zu sehen,
Dann, wenn Sie führen Sie Ihre app durch ausführen
nutzt man eigentlich
Diese Weise eine Datei in das Verzeichnis mit der myapp.jar die Datei wird auch im classpath. Der Klassenpfad ist relativ zu dem Speicherort der jar enthalten.
Log4j zum einen erwartet, dass die log4j.xml Konfigurations-Datei in den Klassenpfad. Wenn Sie nicht mit den Namen log4j.xml Sie müssen auch hinzufügen, eine system-Eigenschaft zu Ihrem start-up-Befehl zu sagen, das log4j-Bibliothek, suchen Sie nach einem anderen Namen.
Ich bin mir nicht sicher, was im Frühjahr erwartet für Konfigurations-Dateien. Und die Eigenschaft beim laden der Datei hängt davon ab, welcher Mechanismus verwendet wird, um die Datei zu laden. Mit einem FileReader oder InputStream wird nicht in der classpath-Mechanismus überhaupt. In diesem Fall müssen Sie wissen, wo die Anwendung erwartet, dass die Datei relativ zum aktuellen Arbeitsverzeichnis.