IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

appeler un properties en dehors du jar


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut appeler un properties en dehors du jar
    bonjour, j'ai un petit problème avec mon appli java.
    J'utilise un jar qui appelle un fichier properties via :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    File properties = new File("dbproperties.properties");
    		if (!properties.exists()) {
    			System.out.println("crap");
    			return false;
    		}
    		try {
    			FileInputStream in = new FileInputStream(properties);
    			_myProperties.load(in);
    		} catch (Exception e) {
    			e.printStackTrace();
    			return false;
    		} 
    		return true;
    quoi qu'il en soit, je n'arrive pas à atteindre mon fichier quand je lance l'appli via une ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar  -classpath p:\javamail\lib\ p:\javamail\javamail.jar -cp dbproperties.properties
    ma question : comment "charger" un fichier properties qui n'est pas dans mon jar à partir de la ligne de commande (ou en modifiant mon code) ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par keguira
    quoi qu'il en soit, je n'arrive pas à atteindre mon fichier quand je lance l'appli via une ligne de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar  -classpath p:\javamail\lib\ p:\javamail\javamail.jar -cp dbproperties.properties
    Lorsqu'on utilise -jar les options -classpath ou -cp sont ignoré...
    Seul l'attribut Class-Path du manifest est utilisé !


    Citation Envoyé par keguira
    ma question : comment "charger" un fichier properties qui n'est pas dans mon jar à partir de la ligne de commande (ou en modifiant mon code) ?
    En utilisant un chemin correct vers ce nom de fichier, c'est à dire soit le chemin complet, soit le chemin relatif par rapport au répertoire courant...

    a++

  3. #3
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par keguira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    File properties = new File("dbproperties.properties");
    //...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -jar  -classpath p:\javamail\lib\ p:\javamail\javamail.jar -cp dbproperties.properties
    Je ne vois pas en quoi ton paramètre (au lancement) sert à quelque chose, si tu charges un certain nom de fichier en dur dans le code : essaye de voir du côté de la ici si jamais ton ".properties" se trouve dans ton <<classpath>> !


  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 906
    Billets dans le blog
    54
    Par défaut
    Sauf erreur de ma part : en utilisant le mecanisme de chargement via des ClassLoader l'URL retournee pointera vers le premier fichier rencontre avec le nom donne qui se trouve sur le CLASSPATH et ce qu'il soit inclus dans un JAR ou pas.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Admettons que ton fichier de conf soit dans un répertoire config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File properties = new File("./config/dbproperties.properties");
    Fonctionne très bien... Même en dehors du jar... Et pas besoin de l'appeler dans ta ligne de commande.

  6. #6
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    @sozie9372 : ça ne marche pas

    @g_rare : l'inputstream renvoyé est égal à null : il ne toruve pas le fichier ..

    Au détour d'une discussion j'avais entendu parlé de "sharedlibraries" mais impossible de trouver une référence nul part.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Quel code tu utilises exactement ? Où se trouve ce fichier ?

    a++

  8. #8
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	private Properties _NepalProperties = new Properties();
     
    	private boolean loadProperties() {		
     
    		try {
    			InputStream is = getClass().getClassLoader().getResourceAsStream("dbproperties.properties"); 
    			_NepalProperties.load(is);
    		} catch (Exception e) {
    			new LogFiles().appendLog(e.getMessage());
    			e.printStackTrace();
    			return false;
    		} 
    		return true;
    	}
    public static void main(String[] args) {
    		..... (créateur de classe .. bblabla)
    			loadProperties();
    	}
    J'ai créé un jar et j'ai un fichier dbproperties.properties dans le meme répertoire ET dans le lib/ (pour voir si ça fait une différence). Et je lance via la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath p:\javamail\lib\ -jar p:\javamail\javamail.jar
    ça me renvoi un inputStream à null et donc je ne peux créer mon Properties.
    Ce qui est frustrant c'est que si je lance mon jar via eclipse : no problemes ..

  9. #9
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    pour récupérer un fichier à la racine du classpath, il faut utiliser

    getResourceAsStream("/dbproperties.properties");


    Dans ton code, le fichier est recherché dans le package où est définie ta classe

  10. #10
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    non non toujour une nullPointerException ..

  11. #11
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    il faut utiliser la méthode de la classe Class et non ClassLoader

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    InputStream is = getClass().getResourceAsStream("/dbproperties.properties");

  12. #12
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    toujour le nullPointerException.

    J'avais essayé au debut le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResourceAsStream("/dbproperties.properties");
    mais ça plantait meme dans eclipse. J'ai seulement réussi avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getClassLoader().getResourceAsStream("/dbproperties.properties");

  13. #13
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par keguira
    J'ai créé un jar et j'ai un fichier dbproperties.properties dans le meme répertoire ET dans le lib/ (pour voir si ça fait une différence). Et je lance via la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath p:\javamail\lib\ -jar p:\javamail\javamail.jar
    Lorsque on utilise l'option -jar, les options -classpath ou -cp ainsi que la variable d'environnement CLASSPATH sont ignoré !!!

    Le seul moyen d'ajouter des éléments au classpath est de modifier la valeur de l'attribut Class-Path du manifest (en utilisant des chemins relatifs par rapport au jar !).


    Citation Envoyé par keguira
    J'ai seulement réussi avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getClassLoader().getResourceAsStream("/dbproperties.properties");
    C'est bizarre parce que cela n'aurait pas dû marcher

    Lorsqu'on utilise le ClassLoader, on doit spécifier le chemin complet logique dans le classpath sans / initial. Donc si le fichier est à la racine du classpath tu aurais du utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getClassLoader().getResourceAsStream("dbproperties.properties");
    A l'inverse avec getClass() on recherche un fichier par rapport au package de la classe, et on utilise un / initial pour indiquer que l'on souhaite rechercher à partir de la racine du classpath, donc l'équivalent est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResourceAsStream("/dbproperties.properties");
    a++

  14. #14
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Par défaut
    on avance.

    J'ai modifié mon manifest pour qu'il ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Class-Path: ./ ./lib/
    Main-Class: org.nepal.NepalErrors
    maintenant il va bien chercher mon properties mais pas mes lib jar. (j'ai essayé de les lister dans le manifeste mais rien : "classNotFound")

Discussions similaires

  1. chargement d'un properties en dehors du jar
    Par eatherquake dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 17/08/2010, 14h36
  2. Ajout de ressources en dehor du JAR
    Par urubs dans le forum NetBeans
    Réponses: 1
    Dernier message: 23/07/2010, 18h11
  3. Appel de JComboBox en dehors de la classe de l'interface.
    Par scipionh dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 06/05/2009, 18h25
  4. Chemin vers un fichier en dehors du .jar
    Par NutellaPiou dans le forum Applets
    Réponses: 1
    Dernier message: 27/02/2009, 09h21
  5. ajout fichiers properties au lancement du jar
    Par Katachana dans le forum Langage
    Réponses: 3
    Dernier message: 19/02/2009, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo