2016-08-01 8 views
0

Ich habe mir die Fragen zu Spring PropertyPlaceholderConfigurer Beans und den zugehörigen Klassenpfaden angesehen, aber mein Problem konnte bisher nicht gelöst werden. Ich mache einige Änderungen an einem älteren Programm namens myApp, das als ein Jar läuft und eine externe Eigenschaftendatei namens myApp.properties' file, which lives in a directory called 'config' within my application directory. In the hat. ApplicationContext.xml 'Datei für `myApp' Ich habe ein Bean definiert, um in dieser externen Eigenschaftendatei zu lesen:Festlegen des Klassenpfads für eine Spring PropertyPlaceholderConfigurer-Bean

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="locations"> 
    <list> 
    <value>classpath:myApp.properties</value> 
    </list> 
</property> 

Diese Anwendung funktioniert nur gut, wenn gebaut und in Netbeans laufen, weil ich den config Ordner zusammen mit allen JAR-Abhängigkeiten für Builds und Läufe umfassen. Aber wenn ich versuche, es von der Kommandozeile ausgeführt werden unter Verwendung von java -jar myApp.jar, ich die folgende Fehlermeldung erhalten:

08/01/2016 15:37:18.562 | ERROR | Unable to start the application. | org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [myApp.properties] cannot be opened because it does not exist 

ich, dass ich den Classpath korrekt angeben, so dass Frühling weiß, wo die Eigenschaften zu finden, doch ich bin nicht sicher, wie genau dies zu tun, so würden alle Hinweise geschätzt ...

Antwort

0

Was schließlich arbeitete für mich war das:

java -cp "myApp.jar;lib/*;config" com.myCompany.myApp.Main 

(Ja, die Klasse mit der Methode main() wird auch Main genannt. Nein, ich habe dieses Programm nicht geschrieben :))

Mein Klassenpfad gibt die JAR an, die die Hauptklasse enthält, ein Verzeichnis lib, das alle anderen JARs enthält, die zum Ausführen dieser Anwendung benötigt werden (mit dem '*' Zeichen) um den Namen jeder JAR in diesem Verzeichnis zu schreiben) und das Verzeichnis 'config', das verschiedene Konfigurationsdateien enthält. Ich fand auch heraus, dass ich myApp.properties ohne Qualifier in der Property-Configurer-Definition angeben konnte, so dass ich diese Datei im selben Verzeichnis wie 'myApp.jar' ohne Probleme behalten konnte.

-1

Versuchen,

java -classpath ";. \ config *" -jar myapp.jar

+0

Was bedeutet das "*" nach "config"? Ich nehme an, es ist ein Wildcard-Charakter? –

+0

Tatsächlich funktioniert die Verwendung der Optionen -classpath und -jar nicht, da der angegebene Klassenpfad zugunsten der in der Datei manifest.mf enthaltenen JAR ignoriert wird. Also musste ich nur -classpath verwenden und die Hauptklasse explizit angeben, anstatt nur die JAR –

+0

. Außerdem habe ich heute Nachmittag in meiner SO-Studie gelernt, dass das '*' speziell für JAR-Dateien (und vielleicht für Klassendateien) gedacht ist (IIRC), so dass das Programm die Datei "Meine Eigenschaften" sowieso nicht gefunden hätte ... –

Verwandte Themen