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

Eclipse Java Discussion :

Exporter en .jar


Sujet :

Eclipse Java

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut Exporter en .jar
    Bonjour,

    j'ai fait un projet qui utilise la lib Jnetpcap : pour l'incorparé à mon projet j'ai suivit ce qui est dit ici (j'utilise la première méthode) : http://jnetpcap.com/eclipse
    => lorsque je compile mon projet, tout fonctionne bien mais lorsque je l'export en JAR, ça ne fonctionne plus. J'ai le message d'erreur : no jnetpcap in java.library.path

    Veuillez trouver ci-joint le fichier .jar de mon projet.
    => Le manifest me semble bon non ?

    Que dois-je faire ?

    contenu de mon fichier "MANIFEST.MF" qui est a l'interrieur de mon .jar généré :
    Manifest-Version: 1.0
    Main-Class: Main
    Class-Path: lib/jnetpcap.jar
    le fichier "jnetpcap.jar" est dans le répertoire "lib" qui est dans le même répertoire que mon fichier .jar généré.


    Merci d'avance,


    EDIT :
    pièce jointe supprimée car sinon je n'ai plus de place pour mettre mon autre pièce jointe qui est dans un des post ci-dessous

  2. #2
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bonjour,

    De base, le JAR que tu exportes n'est pas autonome par rapport aux librairies tierces utilisées et l'indication dans le manifest n'est pas suffisante. Donc, soit tu indiques leur emplacement lors de l'exécution via le paramètre -cp, soit tu utilises le plugin FatJar pour produire un JAR autonome.
    Si tu utilises une version >= à Eclipse 3.4, alors FatJar n'est plus nécessaire à partir du moment où tu fais un export de type Runnable JAR file.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Merci pour ta réponse

    Citation Envoyé par Laurent.B Voir le message
    Donc, soit tu indiques leur emplacement lors de l'exécution via le paramètre -cp,
    C'est à dire, je dois mettre ça où dans eclipse (quel menu => j'ai la version 3.4.2) ?



    Citation Envoyé par Laurent.B Voir le message
    soit tu utilises le plugin FatJar pour produire un JAR autonome.
    Si tu utilises une version >= à Eclipse 3.4, alors FatJar n'est plus nécessaire à partir du moment où tu fais un export de type Runnable JAR file.
    => j'ai testé de créer "Runnable JAR file" avec Eclipse mais ça ne fonctionne pas :
    Exception inthread "main" java.lang.UnsatisfieldLinkError : com.slytechs.library.NativeLibrary.dlopen(Ljava/lang/String; )J
    => de plus a priori on n'a pas le droit (legalement) de faire ça pour toutes les library...

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Effectivement, s'il y a du natif et des problèmes de droit, tu n'a a priori pas d'autre choix que fournir les bibliothèques nécessaires à part et d'indiquer leur emplacement via l'argument -cp (ou -classpath), au moment de l'exécution (hors Eclipse).
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par Laurent.B Voir le message
    Effectivement, s'il y a du natif et des problèmes de droit, tu n'a a priori pas d'autre choix que fournir les bibliothèques nécessaires à part et d'indiquer leur emplacement via l'argument -cp (ou -classpath), au moment de l'exécution (hors Eclipse).
    oui mais on le met où dans eclipse cet argument (quel menu ?) ?

  6. #6
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    oui mais on le met où dans eclipse cet argument (quel menu ?) ?
    Salut,

    Tu confonds là... Il y a l'exécution dans Eclipse puis l'exécution d'un jar.
    Lorsque tu exécutes ton jar, il s'agit d'une simple ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar monJar.jar -cp mes/entrées/de/classpath
    C'est pour cela que Laurent à préciser hors Eclipse.
    Tu peux exécuter un jar dans Eclipse, mais je ne vois pas trop l'intérêt surtout si le projet est dans ton workspace...

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  7. #7
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Je te cite
    Citation Envoyé par boboss123 Voir le message
    tout fonctionne bien mais lorsque je l'export en JAR, ça ne fonctionne plus
    Donc, j'interprète ceci comme quoi sous Eclipse ça fonctionne quand tu l'exécutes. Ce n'est pas ce que tu voulais dire ?
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par Laurent.B Voir le message
    Je te cite:
    Donc, j'interprète ceci comme quoi sous Eclipse ça fonctionne quand tu l'exécutes. Ce n'est pas ce que tu voulais dire ?
    => lorsque je lance mon application via le bouton "run" de Eclispe mon programme fonctionne mais si j'exporte mon programme en .jar puis que je lance via "java nom_du_jar" ça ne fonctionne pas (voir mes messages d'erreur prédécents).

    Donc si j'ai bien compris, c'est pas dans les options de compilation qu'il faut utiliser l'option -cp mais à l'exécution ?
    java -jar "monprojet.jar" -cp "lib\jnetpcap.jar"
    => ça ne fonctionne toujours pas mais j'ai un autre message d'erreur :
    Exception in thread "main" java.lang.UnsatisfieldLinkError : no jnetpcap in java.library.path
    Mon jar créé est dans un dossier et dans ce même dossier j'ai créé un sous répertoire "lib" avec dedans le fichier "jnetpcap.jar" (la lib)

    En fait je comprends pas trop ce que fait Eclipse quand il compile. Le mieux serait peut-être de m'expliquer comment compiler en ligne de commande mon projet ?
    J'ai commencé à le faire
    1- première étape compiler mon mon fichier "Main.java" :
    javac "appClientModule\Main.java" -d "application"
    => déjà là, ça ne fonctionne pas

    ma lib est dans :
    mes_projets\jnetpcap
    => dans ce projet il y a un .jar, des .dll et un dossier include avec plein de fichier .h dedans

    mon fichier Main.java est dans mes_projets\monprojet\appClientModule

    je veux créer mon .jar dans mes_projets\monprojet\application

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    pour la compilation, si je fais :
    javac "appClientModule\Main.java" -classpath "..\jnetpcap\jnetpcap.jar" -sourcepath "..\jnetpcap\jnetpcap.jar"-d "application"
    => ça compile. C'est bien ça qu'il faut faire ? pour les dll il n'y a rien a faire ?

    J'ai essayé de lancer mon .java compilé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java Main -classpath "lib\jnetpcap.jar"
    => mais j'ai une erreur comme quoi il ne toruve pas jnetpcap (alors que j'ai créer un dossier lib avec le .jar dans le meme dossier que le fichier .java compilé)

  10. #10
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Alors, un petit coup de documentation sur la ligne de commande et on se rend compte que les options sont à passer avant soit la classe d'exécution, soit le jar d'exécution.
    Donc, pour toi, cela donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp "lib\jnetpcap.jar" Main
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp mes/entrées/de/classpath -jar monJar.jar
    Pas de questions technique par MP, les forums sont là pour ça.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    effectivement ça fonctionne mieux quand on met les parametres dans le bon ordre

    par contre je n'arrive toujours pas a exécuter le .class : voir mon fichier "run.bat" dans la pièce ci-jointe => la lib externe est a priori bien compilée (voir fichier compile.bat" mais lors du lancement il ne la retrouve pas
    => il n'y a pas a déclarer les dll a quelque part ? si le chemin d'accès de mes dll est faux, ça doit me mettre quoi comme erreur ?

    Remarque : il faut installer winpcap ou libpcap pour que le programme fonctionne fonctionne
    Fichiers attachés Fichiers attachés

  12. #12
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Je veux pas te casser le moral, mais ton premier jar marchait très bien
    Le message d'erreur no jnetpcap in java.library.path est assez explicite. Il te suffit de rajouter à l'exécution l'option suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Djava.library.path=lib/ -jar myJar.jar
    Et, si toutes les dépendances sont incluses dans le dossier lib, tout ira bien
    Pas de questions technique par MP, les forums sont là pour ça.

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par Gueritarish Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Djava.library.path=lib/ -jar myJar.jar
    Merci effectivement ça focntionne mais je n'ai pas bien compris ce que fait l'option -D : ça permet de donner le chemin d'accès à mes dll (car le chemin du .jar est deja defini dans le class-path, non ?) ?

    Ce n'est pas possible de créer un .jar sans avoir a mettre l'option D pour pouvoir le lancer (car jamais un utilisateur lambda saura comment exécuter mon .jar) ?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Citation Envoyé par boboss123 Voir le message
    Merci effectivement ça focntionne mais je n'ai pas bien compris ce que fait l'option -D : ça permet de donner le chemin d'accès à mes dll (car le chemin du .jar est deja defini dans le class-path, non ?) ?
    => après quelques recherches, il semblerait que cette variable serve uniquement à définir l'endroit où sont les dll

    Citation Envoyé par boboss123 Voir le message
    Ce n'est pas possible de créer un .jar sans avoir a mettre l'option D pour pouvoir le lancer (car jamais un utilisateur lambda saura comment exécuter mon .jar) ?
    => par défaut, le java.library.path pointe dans le dossier où est executé le jar : donc en mettant les dll dans le même dossier que le jar executable, ça fonctionne. Toutefois si quelqu'un connait une methode pour changer le chemin par défaut, je suis preneur (a priori c'est impossible de le faire avec le MANIFEST) ...
    => j'ai vu du code à mettre dans l'application pour modifier le chemin mais je trouve ça pas élégant du tout.

  15. #15
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    L'option -Djava.library.path sert surtout à surcharger l'emplacement des dlls utilisables par l'application.
    Après, tu peux très bien charger ces bibliothèques en faisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.loadLibrary("chemin/vers/DLLs");
    Et mettre le chemin dans un fichier de properties qui serait hors du JAR pour pouvoir modifier ce chemin...
    Ça reste acceptable non?

    Sinon, normalement, tu peux aussi faire comme SWT et embarqué les DLLs à la racine du JAR. À ce moment là, il te faut inclure le nom et le checksum de la DLL dans le MANIFEST:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Name: jnetpcap.dll
    SHA1-Digest: chesksum
    Il te faut ensuite signer le jar.
    Tu as la documentation du MANIFEST. Et la documentation de la signature du JAR.

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    ok, merci pour les informations

    Ps : ça serait peut-etre bien de le mettre dans FAQ

  17. #17
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Il y a déjà une entrée dans la FAQ Java qui indique l'utilité de java.library.path et comment modifier son comportement dans une application
    Pas de questions technique par MP, les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. exportation en JAR sous eclipse
    Par popi182 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 23/08/2006, 14h32
  2. [.JAR] Exporter en .JAR
    Par netr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 21/06/2006, 13h32
  3. Problème exportation fichier jar + mysql
    Par oliwan dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 07/05/2006, 20h58
  4. probleme d'exportation en JAR
    Par loic_86 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/04/2006, 21h53
  5. [POI]Exportation de Jar avec librairies
    Par leminipouce dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/10/2005, 18h20

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