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

Java Discussion :

Jar executable et répertoire courant


Sujet :

Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut Jar executable et répertoire courant
    Hello,

    Voilà je souhaite déployer une application java sous forme d'un .jar executable. Le dossier contenant l'appli se présente de la manière suivante:
    projet/projet.jar -> Le jar executable
    projet/lib/*.jar -> les .jar externes utilisés par l'appli
    projet/icons/*.png -> Les icones
    projet/sql/*.sql -> Des fichiers utilisées pour la partie BD de l'appli
    projet/xml/*.xml -> Des fichiers de config
    projet/src/* -> Les sources J'ai développé le projet sous netbeans.
    projet/manual/* -> La doc
    J'ai développé ce projet sous netbeans, qui m'a généré un .jar executable dans le dossier /dist. J'ai donc déplacé le .jar dans le dossier /projet pour que l'utilisateur y ait accès directement.

    Problème: lorsque je double clique sur le .jar pour le lancer, l'application se lance correctement et semble fonctionner, en partie du moins car elle ne trouve pas mes icônes, ni mes fichiers de config sql/xml etc... (alors qu'il semble trouver sans problèmes les librairies).

    Bref, j'ai affiché dans la fenêtre le répertoire courant (sachant que j'ai lancé le .jar du répertoire /home/moi/projets/p1) avec System.getProperty("user.dir") et il me dit que le répertoire courant est /home/moi

    Bref, quelque chose m'échappe dans tout ça, quelqu'un peut -il m'éclairer?

    Merci d'avance!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    Comment as tu lancé le jar ? en double cliquant dessus ? En ligne de commande ? SI oui peux tu nous la donner ?
    EDIT : pardon j'avais mal lu. Quand on double clique sur le jar il met le homedir comme répertoire courant car il associe un nouveau shell à l'appli et par défaut tu es dans le répertoire de l'utilisateur.
    Personnellement je fais toujours un script qui lance le jar et j'exécute ce script, ca permet d'avoir plus de contrôle

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Oui c'est bien ce que je pensais... C'est pas très pratique tout de même :S créer un script reviens à en créer plusieurs, un pour chaque OS, on perd un peu en portabilité même si l'effort n'est pas énorme.

    Aucun moyen de changer ca? Ou bien de récupérer le répertoire de mon projet d'une autre manière ?

    Car ca handicape quand même pas mal mon histoire si l'utilisateur ne peut pas double cliquer sur son jar...

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ben il double clic sur le script il y a pas grande différence
    Non sinon tu peux avoir le chemin vers ton jar, genre regarde ici : http://stackoverflow.com/questions/3...nning-jar-file

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    certes pas grand différence, je voulais juste éviter d'avoir un script de lancement par OS... Faire une release pour tout OS en gros: un .jar pour tous et basta.

    Notez que sous windows le problème ne semble pas se poser... Merci en tout cas je vais voir ca

    Je me demandai aussi au passage: est-ce qu'il y a moyen d'inclure directement dans le jar les divers dossiers ? (lib/ icons/ xml/ ...)

    Ca doit être faisable, mais j'ai rien trouvé avec netbeans pour le moment...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu peux bien sûr tout inclure dans le jar mais il y a des limites :
    • tu ne pourras pas utiliser des jar inclus dans u jar sans implémenter une classloader fait maison ou un outil genre flatjar
    • les fichiers de configuration inclus dans le jar ne peuvent pas être modifiés/personnalisés par l'utilisateur aussi facilement

    Bon courage

  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
    Salut,

    Citation Envoyé par George7 Voir le message
    Non sinon tu peux avoir le chemin vers ton jar, genre regarde ici : http://stackoverflow.com/questions/3...nning-jar-file
    Il y a un code dans la FAQ : Comment trouver le répertoire contenant le jar où est ma classe ?

    Citation Envoyé par vinzzzz Voir le message
    Notez que sous windows le problème ne semble pas se poser... Merci en tout cas je vais voir ca
    C'est simplement que sous Windows le choix du répertoire de travail doit être différent, mais tu peux très bien rencontrer ce genre de problème.

    Il ne faut pas se baser sur le répertoire de travail pour cela, car on ne peut pas être sûr de sa valeur...

    Citation Envoyé par vinzzzz Voir le message
    Je me demandai aussi au passage: est-ce qu'il y a moyen d'inclure directement dans le jar les divers dossiers ? (lib/ icons/ xml/ ...)
    Il suffit pour cela de créer dans les sources (comme un package). Il devrait normalement être présent dans le jar

    Par contre du coup il faut y accéder via getResource() !


    Une autre solution serait de rajouter le répertoire "." dans le classpath du jar.
    Cela devrait permettre d'accéder à tous les fichiers du même répertoire que le jar via des getResource()...

    a++

  8. #8
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    Tu peus transformer ton projet netbean en éclipse si tu connais.
    et là il y a le plugin fatjar qui donnei un jar avec toute les sources même images....

  9. #9
    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 Philcmoi Voir le message
    Tu peus transformer ton projet netbean en éclipse si tu connais.
    et là il y a le plugin fatjar qui donnei un jar avec toute les sources même images....
    fatjar a pour objectif d'insérer des jar à l'intérieur du jar, ce qui nécessite ensuite un classloader particulier...

    Il n'y a aucun besoin de tout cela pour des fichiers de ressources...

    a++

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Par défaut
    Citation Envoyé par George7 Voir le message
    Tu peux bien sûr tout inclure dans le jar mais il y a des limites :
    • tu ne pourras pas utiliser des jar inclus dans u jar sans implémenter une classloader fait maison ou un outil genre flatjar
    • les fichiers de configuration inclus dans le jar ne peuvent pas être modifiés/personnalisés par l'utilisateur aussi facilement

    e
    Oui c'est ce que je me demandait par ailleurs, du coup c'est impossible car l'utilisateur est suceptible de créer des nouvelles tables & donc des fichiers xml de config etc.. Bref il me faut cette possibilité.

    Donc en gros, pour le moment j'ai opté pour une variable d'environnement... L'utilisateur doit la créer pour donner le chemin vers le dossier de mon appli.

    Concernant le bout de code de la FAQ, je l'ai testé, mais ca ne renvoie pas exatcement ce qui est dit (ou alors j'ai mal compris.)

    Exemple: si je lance mon jar situé dans le répertoire de mon appli, j'obtiens le chemin suivant en utilisant la procédure décrite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/vince/NetBeansProjects/projet/projet.jar/
    Donc il faut reculer d'un cran pour obtenir le chemin vers le jar. Mais ca semble marcher dans l'absolu en ajoutant ce qu'il faut pour reculer.

Discussions similaires

  1. [JAR / Linux] Problème de répertoire courant
    Par Nanawel dans le forum Langage
    Réponses: 8
    Dernier message: 01/07/2007, 17h24
  2. Executable et répertoire courant.
    Par Pierre8r dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/11/2006, 15h24
  3. [JSP] Récupérer le répertoire courant
    Par dafly dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 10/06/2004, 11h01
  4. répertoire courant ".\"
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 10/03/2004, 09h57
  5. [jar executable][Service NT]
    Par paca_mike dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 28/04/2003, 13h39

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