2012-08-31 3 views
0

J'ai un fichier de propriétés que j'ai inclus dans un fichier jar que je vais distribuer. Avant que j'ai décidé d'inclure le fichier dans le pot, je chargeais commeCharger le fichier groupé dans le fichier jar uniquement s'il est exécuté en tant que fichier jar

properties.load(new FileInputStream(configFileName)); 

Mais cela ne fonctionne plus une fois que le fichier a été placé à l'intérieur du pot alors j'ai changé le code pour

properties.load(MyClass.class.getResourceAsStream(configFileName)); 

Le seul problème est J'ai des tests unitaires qui utilisent mes propriétés (qui sont chargées statiquement donc je ne peux pas me moquer). Les tests unitaires sont exécutés avant que le pot ne soit créé, ils échouent tous maintenant. Existe-t-il un moyen élégant de gérer un fichier qui sera dans un pot uniquement si le programme est exécuté en tant que pot?

Répondre

0

le problème est probablement que ce fichier ne soit pas visible à votre classloader ..

j'utiliser cette

Classloader cl = getClass().getClassloader(); 
properties.load(cl.getResourceAsStream(configFileName)) 

attention à votre classload si cette application est une application web .. vous » ll ont beaucoup classloaders sur ce cas .. votre ressource doit être visible à cette classloader .. dans un conteneur de servlet comme tomcat ils fonctionnent de cette manière

Bootstrap 
     | 
    System 
     | 
    Common 
    / \ 
Webapp1 Webapp2 ... 

vous pouvez lire plus ici http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html

1

Une façon de procéder est l'appel getResourceAsStream(), et si elle renvoie null, appelez new FileInputStream().

Mais une meilleure question est: pourquoi ne sont pas les propriétés de votre chemin de classe lorsque vous exécutez des tests unitaires? Si vous utilisez un outil de construction comme Maven, cela devrait être automatique. Et cela donnerait une meilleure idée que vous construisez réellement ce que vous pensez être.

+0

Merci pour la réponse. Pourriez-vous expliquer ce que vous voulez dire en plaçant les propriétés dans classpath? Je suis nouveau dans le développement java. J'utilise un outil de construction, mais il est propriétaire et non Maven. – Manny

+0

Si vous utilisez un outil de construction propriétaire, alors je ne sais pas comment vous le feriez, sinon mettre votre fichier de propriétés dans le même répertoire que votre code. Et même cela peut ne pas fonctionner. – parsifal

0

Si vous heureux d'avoir le fichier de propriétés en temps réel avec votre code source essayez:

properties.load(getClass().getResourceAsStream("my.properties")); 

Le fichier my.properties devra vivre dans le même package que le fichier .java dans ce cas.

Questions connexes