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 :

Classes de la base de donnée introuvable à l'exécution


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Classes de la base de donnée introuvable à l'exécution
    bonjour, j'ai le même genre de problème, qu'ici mais les solution que j'ai pu voir jsuqu'à maintenant ne donnent rien.

    mais je vais essayer de tout expliquere depuis le début, pour être + clair
    j'ai fait un pgm sous eclipse, faisant appel à une connexion à une bdd postgresql.

    compilation et exécution, après avoir mis les .jar dans le build path, aucun soucis.

    Lorsque je je tente de créer un .jar de mon pgm afin qu'il puisse être exécuté à partir d'une simple ligne de commande, c'est le dramme.

    En vérifiant et en cherchant, il se trouve que c'est le MANIFEST qui lorsqu'il est créé ne contient pas le classpath. Il faut le créer manuellement. Ce que j'ai fait.

    Et là, (toujours en essayant de l'exécuter en ligne de commande) il ne trouve plus le main.

    J'ai tenté de compiler mes classes manuellement ("javac monProgramme...") la compilation fonctionne. Mais l'exécution me donne le même résultat
    (l'erreur est "Exception in thread "main" java.lang.NoClassDefFoundError")

    je me dis, c'est mon pgm qui est fouareux, je tente de le debuger mais ne trouve rien. Je vérifie le chemin, la présence des fichier .class, tout semble pourtant bon.

    Je tente alors de faire un simple "hello word" depuis un éditeur de texte tout simple.
    la compilation fonctionne.
    Et pas l'exécution.

    J'essaie comme indiqué ci-dessus d'inclure le classpath lors de l'exécution
    (-classpath .\Java\jre6\lib) mais ça ne change rien.

    cela fait depuis deux jours que je retourne tous les classpath dans tous les sens (façon de parler) mais rien n'y fait

    j'ai déjà tenté de désinstall et dréinstall mon JRE pour être sûr d'avoir un truc propre

    je sais plus quoi faire

    un détail que je dois oublier mais je vois pas lequel...

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Tu as bien fait de ne pas nous montrer quelles commandes tu essaies de taper pour faire quoi.

    Ça risquerait de nous aider à comprendre ce que tu essaies de faire et de quoi tu sais déjà avoir besoin pour ça, et du coup on aurait une chance de pouvoir te dire ce qui te manque.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    inutile de faire dans l'ironique

    pour reprendre en résumé, la compilation depuis la fenêtre dos fonctionne, mais pas l'exécution, malgré la précision du classpath dans la commande.

    je travaille donc sous windows, (j'avais oublié de préciser)
    voici la classe toute simple de test que j'ai créée après donc avoir constaté la défaillance de mon lacement de programme, malgré l'ajout du classpath sur le fichier MANIFEST.MF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Hello{
     
    	public static void main(String[] args){
    		System.out.println("hello !!!");
           }
     
    }
    (on peut difficilement faire + simple)

    la compilation :
    >javac Hello.java
    ça fonctionne, il crée le fichier Hello.class (je suis placé dans le répertoire directement)

    l'exécution
    >java Hello
    ne fonctionne pas
    >java -classpath .\Java\jre6\lib Hello
    ne fonctionne pas non plus.
    (le chemin est bien là où sont les librairies java)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    bonjour,

    sinon tu a quoi comme message d'erreur? (en entier stp)

    edit : j'avais écrit une grosse connerie

  5. #5
    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 xavynfive Voir le message
    >java -classpath .\Java\jre6\lib Hello
    ne fonctionne pas non plus.
    (le chemin est bien là où sont les librairies java)
    Tu n'a pas à référencer les librairies java dans le classpath, mais uniquement ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath . Hello
    Attention également à ne pas définir de variable d'environnement CLASSPATH. C'est tout pourri et ca fout la merde...


    a++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    merci pour les précision. Mais malgré cela ça ne marchait pas.

    alors apparemment j'ai trouvé une piste à exploiter

    il se trouve qu'en fait sur la machine où je travaille existait un disque D (recovery ou quelque chose comme ça) et que sur ce disque traînait une ancienne version du jre. Et comme il était mis dans le classpath (je l'avais pas vu au début) il devait aller chercher là-bas par défaut.
    Enfin j'ai pas vraiment compris, mais depuis que j'ai fait table rase (j'ai tout supprimé, toutes les version, tous les IDE, c'était un sacré bordel. j'ai bien sûr nettoyé aussi le classpath cette fois, pour n'y mettre qu'une seule référence à l'avenir) et installé uniquement la dernière version du JRE

    et bah ça marche. (au moins pour le hello word.)

    j'ai plus qu'à retester mon pgm complet avant de mettre le topic en *résolu*

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    bon ben mon programme ne fonctionne toujours pas, il ne trouve toujours pas le main lorsque je lance le .jar

    la différence c'est que le message d'erreur est un peu plus fourni
    (avant il n'y avait que la première ligne, maintenant c'est :

    Exception in thread "main" java.lang.NoClassDefFoundError: Manager
    Caused by: java.lang.ClassNotFoundException: Manager
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: Manager. Program will exit.

  8. #8
    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
    Il ne trouve pas la classe Manager.

    Où se trouve-t-elle exactement ?
    Comment lances-tu le jar ?
    Que contient ton fichier MANIFEST ?


    a++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    je suis dans le répertoire "toto" (très original..)

    ce répertoire contient :
    un sous-répertoire META-INF dans lequel se trouve le MANIFEST
    une dixaine de fichier .java dont Manager.java

    voici ce que contient MANIFEST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: Manager
    Class-Path: C:\Program Files\Java\jdk1.6.0_21\lib\postgresql-8.4-701.jdbc3.jar
    (je n'ai pas oublié le dernier retour à la ligne ^^)

    le class-path indique donc l'endroit où trouver la lib pour mon postgresql

    je fais la compilation :
    >javac Manager.java Connexion.java ... (liste de tous les fichiers .java)
    ça compile, j'ai bien ma dizaine de .class

    pour un soucis de propreté, j'ai déplacé les .java pour ne garder que les .class et le répertoire du manifeste

    je fais le .jar (qui s'appellera agreg.jar, mon pgm portant sur des agrégations)
    >jar cvmf META-INF/MANIFEST.MF agreg.jar *.class
    il me crée bien le .jar

    si je lance le .jar
    >java -jar agreg.jar
    il me ressort l'erreur citée.

    lorsque j'ai fait un .jar exactement de la même manière avec mon "hello" (pour lequel j'ai donc dû recréer un manifeste) cela fonctionnait

    si besoin d'autres détails je suis à ton écoute

  10. #10
    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
    1. Les éléments du Class-Path du manifest sont séparé par des espaces. Donc déjà tu as un problème avec "Program Files"
    2. Les éléments du Class-Path du manifest référencent des archives selon un chemin relatif par rapport à ton jar principal. Tu ne dois pas utiliser de chemin complet. De même il est préférable d'utiliser des / pour séparer les éventuels répertoires...
    3. Tu ne devrais pas placer cette librairie dans le répertoire lib du JDK : ce n'est pas fait pour cela !


    En clair :
    1. Tu mets le fichier postgresql-8.4-701.jdbc3.jar dans le même répertoire que ton jar.
    2. Tu utilises la ligne suivante dans ton manifest :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Class-Path: postgresql-8.4-701.jdbc3.jar


    a++

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    merci pour les précision. j'ai donc apporté ces corrections dans le manifest, et déplacé le fichier postgresql-8.4-701.jdbc3.jar dans le répertoire de mon jar.

    cette fois, il me sort cette erreur :
    Exception in thread "main" java.lang.NoClassDefFoundError: Manager (wrong name:
    agreg/Manager)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: Manager. Program will exit.

  12. #12
    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
    Tu utilises des packages... Il faut donc que ton arborescence des sources/classes correspondent à tes packages...

    La classe Manager doit être situé dans un répertoire "agreg" à l'intérieur du Jar, et ton manifest doit contenir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Main-Class: agreg.Manager

    a++

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    ah, merci beaucoup !

    cette fois c'est bon, ça fonctionne !

    j'avais pas du tout pensé au problème package<->arborescence

    je peux maintenant passer ce topic en résolu

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

Discussions similaires

  1. [PHP 5.3] Classes simples et base de données
    Par Bakura dans le forum Langage
    Réponses: 5
    Dernier message: 18/10/2009, 14h34
  2. Nom des classes dans la base de données.
    Par chriscoolletoubibe dans le forum JPA
    Réponses: 3
    Dernier message: 14/09/2009, 10h09
  3. diagramme de classe pour un base de donnée
    Par gentelmand dans le forum Diagrammes de Classes
    Réponses: 5
    Dernier message: 23/05/2009, 00h30
  4. Path de la base de donnée introuvable
    Par elyboss dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/04/2008, 00h07
  5. Pb Base de donnée introuvable
    Par marman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/03/2007, 19h57

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