2010-10-01 5 views
0

J'ai un fichier JAR exécutable de base avec manifest.txt contenant la classe MainClass et d'autres dépendances de fichiers jar. Je voulais déplacer mon fichier de configuration, "application.properties" en dehors du pot dans un répertoire où il est facile à configurer/maintenir. Le code java fait un simple ResourceBundle.getBundle ('application.props') pour le charger.Java: impossible de charger applications.properties

J'ai une configuration de répertoire qui ressemble à ceci:

/bin/run.sh 
/lib/stuff.jar 
/common/application.properties 

Mon run.sh semble similaire à ceci:

TOOLNAME="stuff.jar" 
CLASSPATH="../common" 
java -cp ${CLASSPATH} -Dapplication.props=application -jar ../lib/${TOOLNAME}.jar & 

Quand je lance cela, les pistes de pot, mais semble toujours pas pour trouver le fichier application.properties.

Je ne suis pas sûr si cela est en quelque sorte dû au manifeste.txt substituant mon -D paramètre. Vous vous demandez également s'il est possible de déplacer le chemin de classe pour ce dossier "../common" dans le manifeste.txt?

Répondre

3

Le problème est votre paramètre -jar. Si vous spécifiez cela, le paramètre -cp est ignoré.

Vous pouvez placer votre chemin de classe dans votre manifeste, le chemin spécifié est relatif au chemin environnant du pot. Si vous spécifiez ../common, vous pourrez accéder à votre application.properties en tant que ressource.

+0

Merci! Jusqu'à présent, j'ai essayé de mettre "../common" dans le classpath manifeste comme suggéré, mais il ne semble toujours pas le voir. L'option -jar ne remplace pas les paramètres -D, n'est-ce pas? – Will

+0

Je ne crois pas que '-D' est ignoré ici. Vous pouvez l'essayer en supprimant votre paramètre '-jar', en mettant votre jar dans les arguments' -cp' et en spécifiant explicitement votre classe principale. Si tout fonctionne alors, vous pouvez revenir en arrière et essayer de faire fonctionner le paramètre '-jar'. – tangens

+0

Il semble fonctionner si je place le fichier de propriétés dans le même répertoire que le fichier jar et que je spécifie "." dans le classpath manifeste. Cela ne fonctionne pas si je spécifie "../common" cependant, cela pourrait-il être une fonctionnalité de sécurité pour restreindre le classpath aux répertoires seulement en dessous? – Will

Questions connexes