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 :

[JAR / Linux] Problème de répertoire courant


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [JAR / Linux] Problème de répertoire courant
    Salut à tous,

    j'ai développé une appli sous Eclipse/Windows et j'en ai fait un JAR pour simplifier l'utilisation. Lorsque je lance le JAR sous WIndows, aucun problème, dans n'importe quel cas.

    Par contre sous Linux j'ai un petit soucis : si je vais par le terminal dans le répertoire contenant le JAR et que je le lance, il fonctionne correctement.
    Mais si je le lance par exemple depuis un autre répertoire ou depuis Gnome en faisant clic-droit + "ouvrir avec" puis que je tape "java -jar", là ça ne fonctionne plus correctement.

    Je m'explique : le programme crée/édite à chaque exécution un fichier de log, normalement situé dans le même dossier que le JAR. Mais je me suis aperçu que quand je le lance depuis un autre répertoire ou depuis Gnome, le fichier de log n'est pas du tout créé dans le dossier du JAR mais dans le dossier ou je suis situé pour le lancer.

    Comme le programme charge aussi des données depuis un fichier XML situé dans un sous-dossier, il ne trouve pas le fichier et l'exécution ne fonctionne pas correctement.

    Je suppose que cela vient donc du chemin vers le "dossier de travail" ou "dossier courant" avec lequel travaille l'appli une fois lancée.

    Ma question finale est donc : comment m'assurer que le dossier de travail à l'exécution de l'appli est bien celui contenant le JAR ?

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Dans le fichier manifest de ton jar, il me semble que c'est paramétrable... mais je ne me souviens plus de la syntaxe => recherche
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Ok merci je vais chercher par là.
    J'aurais pensé qu'il était aussi possible de le changer par le code...

  4. #4
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Si tu trouves, merci de me le dire. Pour moi cela n'existe pas, parce que la notion de répertoire de jar est une notion qui n'est pas fiable : ton jar peut très bien être sur un réseau, dans un cache, ou pire changer de nom, etc.

    Les seules solutions que j'ai trouvé à ce genre de problème
    • convenir à l'avance avec le client du répertoire de travail, voir d'un fichier de Properties contenant ce répertoire
    • à la première utilisation, demander dans un JDialog à l'utilisateur de bien vouloir donner un répertoire de travail, et le sauvegarder dans une Preference,
    • etc dans ce genre de style.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Alors comment obtenir le chemin où est placé le JAR lorsqu'il est exécuté ??
    Il me semble que tous les programmes ont un paramètre d'environnement à l'exécution qui est le chemin "par défaut" lorsqu'on fait référence à un chemin relatif dans le code.

    Sous Windows ça peut se paramétrer notamment lorsqu'on crée un raccourci, et cela correspond au champ "Démarrer dans :" de la boîte de dialogue des propriétés.

    Si ma question n'est pas la bonne, comment, à ce moment là, faire en sorte dans le code pour que mon fichier de log créé à l'exécution se situe dans le même répertoire que le JAR ?
    Comment faire référence depuis le code au dossier contenant le JAR (disons pour généraliser la classe principale, contenant le main(), peu importe si c'est un JAR ou pas), et ainsi, à ses sous-dossiers ?

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Un programme java ne peut se baser sur la position sur disque des jars. Ou, du moins, il peut y arriver, mais ce n'est pas une bonne pratique.

    Tu trouveras de nombreuses personnes qui y sont brillament arrivées an analysant le CLASSPATH, accessible par System.getProperty("java.class.path").

    Pour tes autres questions :
    • Oui, tous les programmes ont un chemin par défaut ; le problème est que cette notion n'est pas très portable, et que ce que l'un considère comme le défaut implicite n'est pas le même que l'autre, etc. Sous windows, il arrive que ce soit le bureau ; sous KDE, ce n'est pas le bureau, mais le HOME. Ou autre chose. Bien sûr, cela se configure partout.
    • Comment faire pour que le log se situe dans le même répertoire que le jar ?... Voir plus haut... jusqu'au jour où ton programme sera lancé par Java Web Start, ou autre.
    • Coment faire référence au jar ?... le mieux est de ne pas y faire référence.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Citation Envoyé par gifffftane
    Alors comment obtenir le chemin où est placé le JAR lorsqu'il est exécuté ??
    Il me semble que tous les programmes ont un paramètre d'environnement à l'exécution qui est le chemin "par défaut" lorsqu'on fait référence à un chemin relatif dans le code.
    Ceci n'est pas le chemin de l'application mais le répertoire de travail. Ce répertoire correspond généralement au répertoire depuis lequel tu lances le programme. Tu aurais le même comportement sous Windows si tu lancais le jar en ligne de commande depuis un autre répertoire...

    Citation Envoyé par gifffftane
    Si tu trouves, merci de me le dire. Pour moi cela n'existe pas, parce que la notion de répertoire de jar est une notion qui n'est pas fiable : ton jar peut très bien être sur un réseau, dans un cache, ou pire changer de nom, etc.
    +1

    Mais c'est quand même possible de récupérer le répertoire... par exemple en utilisant le ClassLoader pour récupérer le chemin d'une classe du jar, et de découper l'URL ainsi obtenu (il doit y avoir un exemple de code qui traine quelque part sur le forum).


    Mais sinon tu peux également utiliser le profil de l'utilisateur pour y stocker ses données, en créant un fichier/répertoire dans le user.home :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File workingDir = new File( System.getProperty("user.home"), ".MonApplication");
    Quand aux XML à lire, le mieux serait de le mettre dans le jar et de le lire avec un getResource(). Et si jamais il doit être modifié, tu le copies dans le répertoire user.home

    a++

  8. #8
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Et dans la FAQ tu trouveras cela: http://java.developpez.com/faq/java/...YSTEME_dir_jar

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci pour toutes ces réponses très complètes !

    Je vois que je partais dans une mauvaise direction, en y réfléchissant c'est évident.
    Je vais donc corriger ces choix afin d'éviter les problèmes que j'ai eus.

    En fait je m'étais orienté vers le fait de placer des fichiers de config en dehors du JAR notamment pour la gestion des locales. Certains des fichiers sont dans le JAR et j'ai bien sûr utilisé le getResource() pour y faire référence. Mais je ne suis pas arrivé à faire de même pour les fichiers contenant les chaînes de ces locales.

    J'utilise la méthode ResourceBundle.getBundle(), quelqu'un pourrait-il me préciser l'utilisation de cette méthode ? (rien à voir avec le sujet original mais bon...)

    Merci d'avance

Discussions similaires

  1. Problème de répertoire courant
    Par saymon dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 18/05/2009, 13h53
  2. Problème de répertoire courant
    Par demando77 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 17/05/2008, 18h32
  3. Problème de répertoire courant
    Par Amnesiak dans le forum Langage
    Réponses: 3
    Dernier message: 08/12/2007, 15h44
  4. [File] Problème de répertoire courant
    Par seb_asm dans le forum Applets
    Réponses: 5
    Dernier message: 03/05/2005, 19h44
  5. Problème d'exportation jar : où est mon répertoire bin ?
    Par fredcontin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/05/2004, 16h57

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