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

avec Java Discussion :

Compilation intégrant un JAR


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut Compilation intégrant un JAR
    Bonjour à tous!
    Jusqu'à présent j'utilisais Eclipse et tout allait bien, mais lorsque j'ai voulu faire un JAR exécutable je me suis un peu paumé et rien ne fonctionne, je me suis donc décidé à vraiment comprendre comment fonctionne la compilation et les dépendances entre les classes, librairies, etc.... et tout faire manuellement pour avoir mon JAR. Mais je commence graduellement, pour l'instant je cherche juste à compiler et lancer mon programme en ligne de commande.

    Voici la structure de mon projet :


    Ses particularités :
    - j'ai intégré la librairie pour gérer une base de données H2. J'avais fait clic droit sur le projet->Build path->Add external JAR.
    - j'utilise des icônes qui sont stockées dans "ressources/images"

    Pour ma compilation, je me place dans la répertoire src et je tape :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    F:\JAVA Eclipse\CollPhil - Copie\src>javac -cp .;ressources/h2-1.3.161.jar -d ../bin launcher/Launcher.java
    Déjà ce que je trouve bizzare c'est qu'il ne copie pas la librairie H2 dans le répertoire bin. Forcément lorsque je lance avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    F:\JAVA Eclipse\CollPhil - Copie\src>java -cp ../bin launcher/Launcher
    Il me met un message d'erreur de chargement des pilotes de la base de données H2. Pour info voici le code correspondant au chargement des drivers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public FenetrePrincipale() {
    		String nomDriver = "org.h2.Driver";
     
    		// Chargement du driver JDBC pour MySQL
    		try{
    		    Class.forName(nomDriver); 
    		}catch(ClassNotFoundException cnfe){
    			JOptionPane.showMessageDialog(null, "La classe "+nomDriver+" n'a pas été trouvée", "Erreur de chargement de driver de base de données", JOptionPane.ERROR_MESSAGE);
    		}
    Cependant quand je lance directement à partir d'Eclipse tout marche nickel donc le code est bon depuis le début. Mais pour ma compilation je ne vois pas quoi faire d'autres qu'indiquer le JAR dans le classpath....

    Liiloouuu... Heellppp... pleeeaaaaaase....

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Et bien je n'arrive toujours pas à compiler manuellement et à faire en sorte que quand je lance mon programme "CollPhil.jar" il trouve la base de données.

    Cependant j'ai réussi à trouver une alternative avec Eclipse pour créer directement le JAR. Dans tous les tutos que j'ai vu ils disent de faire clic-droit sur le projet -> Export -> JAR File, mais mais quand je passe par là et que je lance le JAR il me dit que la base de données est introuvable.

    Du coup à la place de "JAR File" j'ai testé "Runnable JAR File" et là ça fonctionne. Bon c'est déjà une bonne chose j'arriverai peut être à finaliser mon programme jusqu'au bout, mais c'est pas le top de pas savoir compiler et créer un JAR manuellement, et d'être surtout dépendant d'Eclipse.... :/

    Je laisse encore un peu non résolu si quelqu'un passe et a une idée de pourquoi ma ligne de commande pour la compilation n'est pas bonne, je fermerai dans quelques jours en cas

  3. #3
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    c'est pas le top de pas savoir compiler et créer un JAR manuellement, et d'être surtout dépendant d'Eclipse
    Euh, ça sert à quoi de savoir compiler et créer un JAR manuellement ? De toutes façons, si tu n'utilises pas d'IDE la complexité maximale du code est inférieure à ce que tu peux gérer avec un IDE, donc à partir d'une certaine importance, tu es forcément dépendant d'un IDE... Mais je ne vois pas en quoi c'est un problème...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    [HS] Mes motivations sont purement personnelles, même pas forcément à titre utile. Déjà c'est de la curiosté et c'est ce qui m'a permis d'être pluridisciplinaire aujourd'hui. Aussi car ça permet d'en apprendre beaucoup plus sur le sujet qui nous intéresse que de simplement se borner à l'aspect concret des choses. Et enfin parce que je considère qu'un bon programmeur n'est pas celui qui va simplement faire quelque chose mais celui qui va comprendre ce qu'il fait jusque dans les moindres détails.
    Quand je me suis mis à l'ordinateur au tout début j'ai voulu comprendre réellement comment fonctionnait un ordinateur, comment est géré la mémoire etc... ça ne m'a servi à rien sur le moment, mais je me suis aperçu que ça m'a vraiment beaucoup aidé par la suite. Bref tout ça pour dire que j'ai toujours soif de connaissances quelle qu'elles soient et qu'il ne faut pas se fermer à sa simple fonction mais toujours évoluer, c'est ce qui permet d'avancer et de grimper dans la vie ^^ [/HS]

  5. #5
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Mais alors, pourquoi ne pas compiler à la main aussi ? Sinon, tu es dépendant de javac... Ah mais de toutes façons, après tu es dépendant de la JVM...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Cependant j'ai réussi à trouver une alternative avec Eclipse pour créer directement le JAR. Dans tous les tutos que j'ai vu ils disent de faire clic-droit sur le projet -> Export -> JAR File, mais mais quand je passe par là et que je lance le JAR il me dit que la base de données est introuvable.
    Quel est le message exact ?

    Cependant quand je lance directement à partir d'Eclipse tout marche nickel donc le code est bon depuis le début. Mais pour ma compilation je ne vois pas quoi faire d'autres qu'indiquer le JAR dans le classpath....
    C'est normal il faut effectivement indiquer les librairies nécessaires à la compilation. Tu as tout juste jusque là.

    Par contre il faut également préciser le classpath pour ton exécution (commande java)

    Il faut bien distinguer 2 choses :
    - la compilation de tes sources (te permet de créer ton jar)
    - la construction de ton application (produit "quelque chose" d'exécutable en standalone (sous réserve de jvm ) ) (tu peux regarder ant par exemple)

    Le plus simple est de copier les jars nécessaires dans ton dossier bin
    Un peu mieux est de "packager ta livraison" avec un .bat et .sh pour lancer ton programme sous tes différents environnements.


    Euh, ça sert à quoi de savoir compiler et créer un JAR manuellement ? De toutes façons, si tu n'utilises pas d'IDE la complexité maximale du code est inférieure à ce que tu peux gérer avec un IDE, donc à partir d'une certaine importance, tu es forcément dépendant d'un IDE... Mais je ne vois pas en quoi c'est un problème...
    Il est vrais qu'à partir d'une certaine taille, il est difficile de se passer d'un outil, mais c'est toujours bien de mettre de temps en temps les mains dans le cambouis.

    Il est très intéressant de construire l'application indépendamment de l'IDE (dans un cadre industriel):
    - permet aux différents dev de choisir leurs IDE (ex : projet open source...)
    - permet de décloisonner les processus (livraison, test ...) du développement, si on a une plateforme indépendante, ça permet de mettre en place une véritable usine logicielle automatisée (compilation de nuit, tests unitaires,fonctionnels perf ...)
    - utilisation "d'outils fait pour ça" : hudson/jenkins, ant,maven, gradle ...

    Il y aurait beaucoup à dire, mais bon la je suis un beaucoup hors sujet

  7. #7
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Nan, d'accord, mais quand on débute c'est pas le plus urgent... En gros, être programmeur, c'est aussi passer du temps à se former, mais en gérant les priorités...
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Merci LittleBean de toutes ces précisions, ça m'a permis de voir un peu plus clair donc je reprends depuis le début, peut être que ça sera plus facile de m'orienter.

    Du coup je vais prendre les choses dans l'ordre. Déjà j'ai simplifié ma structure pour les tests, un seul package "bin" regroupant toutes les sources .java, répertoire "lib" contenant le JAR nécessaire et "ressources" contenant mes images.



    Première chose : Je pense m'être rendu compte que pour la compilation, rien ne sert d'indiquer les librairies JAR et ressources nécessaires car elles ne sont pas prises en compte. J'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javac -cp .;./ressources/*;./lib/h2.1.3.161.jar -d ../bin bin/Launcher.java
    mais cela ne compile que les .java pour me donner les .class, et omet complètement le JAR. Ce qui veut dire que ma librairie et mes images vont manquer quand je vais lancer avec "java". Comme tu m'as dit je peux mettre ma librairie dans le répertoire "bin" mais je ne pense pas que ce soit normal de le faire manuellement, il doit pouvoir être possible de tout intégrer en jouant peut être sur les différentes options :
    -cp <path> Specify where to find user class files and annotation processors
    -sourcepath <path> Specify where to find input source files
    -bootclasspath <path> Override location of bootstrap class files
    -extdirs <dirs> Override location of installed extensions
    -endorseddirs <dirs> Override location of endorsed standards path
    -s <directory> Specify where to place generated source files

    Pour résumer : quelle option de "javac" dois-je utiliser pour prendre en compte à la fois le JAR nécessaire et mes ressources (images) ?
    (je sais je m'obstine, mais c'est parce que je trouve qu'il n'y a rien de plus énervant que de savoir quelque chose possible mais de ne pas savoir le faire... ^^)

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Pour résumer : quelle option de "javac" dois-je utiliser pour prendre en compte à la fois le JAR nécessaire et mes ressources (images) ?
    Aucune.

    javac sert à compiler tes sources

    http://docs.oracle.com/javase/6/docs...ows/javac.html

    Il faut utiliser une autre commande pour créer ton jar :

    http://docs.oracle.com/javase/6/docs...ndows/jar.html

    Exemple le + simple :
    jar cf myFile.jar *.class
    Avec la commande jar tu vas pouvoir faire un "gros" jar qui s’exécute tout seul (ce que tu cherches à faire si j'ai bien compris)

    MAIS ... ce n'est pas une bonne pratique, il vaut mieux laisser les autres jars/images en dehors.

    Par exemple, si tu dois monter ton driver bdd de version (changement de jar), ton client peu le faire sans relivraison (ou toi sans recompiler).
    De même il peut changer les images sans relivraison

    Bon courage

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Ok, je cherchais dans la mauvaise direction à la base. Merci déjà de la réponse. Dès que je teste je dirai si j'ai réussi ^^

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

Discussions similaires

  1. Compilation javac avec .jar
    Par carton99 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 23/05/2013, 18h00
  2. Problème compilation d'un jar
    Par jchevalay54 dans le forum Débuter
    Réponses: 12
    Dernier message: 10/09/2012, 11h14
  3. Compilation d'un .jar avec Eclipse
    Par 0coco0 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 23/03/2009, 08h18
  4. [JAR]créer une compilation de jar
    Par biozaxx dans le forum Général Java
    Réponses: 8
    Dernier message: 05/10/2005, 11h08
  5. [JAR]Probleme compilation avec jdom
    Par ronaldgis dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 04/08/2004, 11h31

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