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

API standards et tierces Java Discussion :

JDIC : Could not find main class


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par adiGuba
    A tout hasard... Que te donne la commande suivante :
    a++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\>java -version
    java version "1.5.0_06"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
    Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
    Mais je fourni le jre 1.4.2 avec mon appli. Donc une fois installée, elle ira utilisera le java.exe de la version 1.4.2...

  2. #2
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    J'ai lancé mon appli à partir de la ligne de commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Xms400M -Xmx400M -verbose -classpath %classpath%;myapp.jar cimpa.myapp.awt.MyApp
    et voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [Loaded sun.misc.JarIndex from C:\Program Files\NDT KIT-v11\jre\lib\rt.jar]
    [Loaded java.security.PrivilegedActionException from shared objects file]
    [Loaded sun.misc.URLClassPath$FileLoader from shared objects file]
    Exception in thread "main" java.lang.NoClassDefFoundError: and
    [Loaded java.lang.Shutdown from shared objects file]
    [Loaded java.lang.Shutdown$Lock from shared objects file]
    Il y a une exception, mais je ne sais pas trop quoi en tirer...

  3. #3
    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
    As-tu vérifiés qu'une fois dans le Jar ton manifest soit correct ?

    PS : fais attention si tu developpes en Java 5.0 pour une cible Java 1.4 : il faut compiler pour du code 1.4 car le format des classes à quelques peu changé...

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par adiGuba
    As-tu vérifiés qu'une fois dans le Jar ton manifest soit correct ?

    PS : fais attention si tu developpes en Java 5.0 pour une cible Java 1.4 : il faut compiler pour du code 1.4 car le format des classes à quelques peu changé...
    Alors de 2 choses l'une :
    - Lorsque je développe sous Eclipse, je lui spécifie le jre1.4.2. Il n'y a donc que lorsque je double-clic sur le jar généré que j'utilise le jre1.5. Donc mon problème peut venir de là...
    - J'ai réalisé une install avec le jar généré par Eclipse. J'ai placé tous les fichiers nécessaires, j'ai copiés les librairies comme il faut. Pour lancer l'appli, j'utilise un ".bat" qui contient le texte suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PATH=.\jre\bin
    java -Xms400M -Xmx400M -classpath %classpath%;myapp.jar cimpa.myapp.awt.MyApp
    Là, ça plante...
    Par contre si j'utilise un fichier ".bat" qui contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PATH=.\jre\bin
    java -Xms400M -Xmx400M -classpath myapp.jar cimpa.myapp.awt.MyApp
    (identique qu précédent, sauf pour l'affectation du classpath), le programme marche...
    Donc peut-être un problème de classpath...
    De plus, si je double-clic sur le jar placé dans le répertoire d'install, mon appli se lance bien... Et ça, je ne le comprends pas... Sauf si le jar a besoin de l'API JDIC dans le même répertoire que lui...

    Affaire à suivre...

  5. #5
    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
    Quel est ton manifest exact dans le jar ?
    Quel est ton arborescence de fichier ?

    a++

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par adiGuba
    Quel est ton manifest exact dans le jar ?
    Quel est ton arborescence de fichier ?

    a++
    Mon MANIFEST exact dans le jar est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Manifest-Version: 1.0
    Main-Class: cimpa.myapp.awt.MyApp
    Class-Path: lib/castor-0.9.5.4-xml.jar lib/xerces-J_1.4.0.jar lib/jiu.jar lib/poi-2.5.1-final-20040804.jar lib/numericalMethods.jar lib/jdic-0.9.1/jdic.jar
    Il y a bien des lignes de plus de 80 caractères. Mais même en formattant le jar comme tu me l'as dit avec "jar -cvfm ..." le problème persiste.

    Par contre, je viens de faire un test. Si je copie dans un dossier :
    - le ".jar" de mon appli
    - le dossier contenant l'API JDIC
    - le manuel d'utilisateur (qui ne sert ici que pour mon exemple)

    j'arrive à lancer mon appli et JDIC fonctionne correctement puisque j'arrive à ouvrir le manuel d'utilisateur...

    Donc la question est pourquoi ai-je besoin du dossier contenant les dll et les jar de l'API JDIC dans le même dossier que mon ".jar"?...

    Je pensais qu'en les intégrant au jar, cela suffirait, mais il semblerait que ce ne soit pas le cas... (puisque l'API JDIC est bien présente dans un répertoire "lib" de mon jar)
    Je vais essayer de regarder de côté-là...

    Citation Envoyé par adiGuba
    Quel est ton arborescence de fichier ?
    Qu'entends-tu par là? Arborescence du jar? De mon dossier contenant JDIC? De mon projet?

  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
    Citation Envoyé par seiryujay
    Donc la question est pourquoi ai-je besoin du dossier contenant les dll et les jar de l'API JDIC dans le même dossier que mon ".jar"?...

    Je pensais qu'en les intégrant au jar, cela suffirait, mais il semblerait que ce ne soit pas le cas... (puisque l'API JDIC est bien présente dans un répertoire "lib" de mon jar)
    Je vais essayer de regarder de côté-là...
    Non !!!

    Le Class-Path du manifest référence des librairies en dehors du jar !!!!
    Donc tu dois avoir une arborescence du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ./tonarchive.jar
    ./lib/jdic-0.9.1/jdic.jar
    ./lib/jdic-0.9.1/windows/jdic_stub.jar
    etc...
    a++

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Petite correction... En fait, je viens de découvrir que j'ai DEUX fichiers MANIFEST dans mon jar :
    - un situé à la racine et qui contient ce que j'ai mis au-dessus, c'est-à-dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Manifest-Version: 1.0
    Main-Class: cimpa.myapp.awt.MyApp
    Class-Path: lib/castor-0.9.5.4-xml.jar lib/xerces-J_1.4.0.jar lib/jiu.jar lib/poi-2.5.1-final-20040804.jar lib/numericalMethods.jar lib/jdic-0.9.1/jdic.jar
    - l'autre situé dans le dossier META-INF de mon jar, contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Manifest-Version: 1.0
    Class-Path: lib/castor-0.9.5.4-xml.jar lib/xerces-J_1.4.0.jar lib/jiu.
     jar lib/poi-2.5.1-final-20040804.jar lib/numericalMethods.jar lib/jdi
     c-0.9.1/jdic.jar
    Main-Class: cimpa.myapp.awt.MyApp
    Donc pas de ligne contenant plus de 80 caractères dans le 2nd...

  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 seiryujay
    Donc pas de ligne contenant plus de 80 caractères dans le 2nd...
    Ah j'aime mieux ca

    Le seul et unique vrai manifest est bien entendu celui de META-INF

    Sinon voir ma réponse précédente : les librairies externes ne doivent pas être dans ton jar...

    a++

  10. #10
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par adiGuba
    Non !!!

    Le Class-Path du manifest référence des librairies en dehors du jar !!!!
    Donc tu dois avoir une arborescence du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ./tonarchive.jar
    ./lib/jdic-0.9.1/jdic.jar
    ./lib/jdic-0.9.1/windows/jdic_stub.jar
    etc...
    Ok, ça commence à s'éclaircir un peu...

    Par contre, j'aurai quelques petites questions :
    - Déjà, est-ce que tu connaitrais un site qui explique le fonctionnement du MANIFEST? (ce qu'il doit contenir, ne doit pas contenir, comment le stucturer, etc)

    - Ensuite, tu dis
    Citation Envoyé par adiGuba
    Le Class-Path du manifest référence des librairies en dehors du jar !!!
    Qu'entends-tu par librairies? Les dll? Les jar? Les 2?

    - Pour l'instant, j'avais dans mon appli différentes librairies qui étaient inclues dans mon jar. Ces librairies étaient aussi copiées dans le répertoire d'installation de mon appli.
    Maintenant, je ne sais pas pourquoi, elles ne sont plus copiées dans le jar (hormis JDIC), mais elles sont toujours copiées dans le répertoire d'installation de mon appli. Et ça fonctionne toujours...
    Donc pourquoi inclure des librairies dans le jar de mon appli?
    Pourquoi est-ce que mes jar ne sont plus intégrées dans le jar de mon appli? (mais ça, je pense pas que vous puissiez beaucoup m'aider...)

    - A la limite, je suis aussi preneur pour un site sur la création de jar... (que faut-il y mettre, que ne faut-il pas y mettre, etc)

  11. #11
    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 seiryujay
    Par contre, j'aurai quelques petites questions :
    - Déjà, est-ce que tu connaitrais un site qui explique le fonctionnement du MANIFEST? (ce qu'il doit contenir, ne doit pas contenir, comment le stucturer, etc)
    http://java.sun.com/docs/books/tutorial/deployment/jar/

    Citation Envoyé par seiryujay
    - Ensuite, tu dis
    Citation Envoyé par adiGuba
    Le Class-Path du manifest référence des librairies en dehors du jar !!!
    Qu'entends-tu par librairies? Les dll? Les jar? Les 2?
    Les 2 : ton jar ne doit normalement contenir que tes classes et tes ressources (images, etc...).
    Tous ce qui est référencé par l'attribut Class-Path doit se trouver en dehors du jar...

    Citation Envoyé par seiryujay
    - Pour l'instant, j'avais dans mon appli différentes librairies qui étaient inclues dans mon jar. Ces librairies étaient aussi copiées dans le répertoire d'installation de mon appli.
    Tu ne peux pas inclure directement un jar dans un autre, car il sera interprété comme un fichier quelconque et les classes qu'il contient ne seront pas accessible (a moins de bidouiller de ton code avec des URLClassLoader mais cela complique la tâche)...

    Si tu veux vraiment tout avoir dans un seul jar, il faut tout décompresser pour tout recompresser dans un seul et unique jar...

    Citation Envoyé par seiryujay
    Maintenant, je ne sais pas pourquoi, elles ne sont plus copiées dans le jar (hormis JDIC), mais elles sont toujours copiées dans le répertoire d'installation de mon appli. Et ça fonctionne toujours...
    Normal il utilise les jar 'externes'... Les autres sont simplement ignorés...

    Citation Envoyé par seiryujay
    Donc pourquoi inclure des librairies dans le jar de mon appli?
    Pour moi c'est totalement inutile et fastidieux... mais certain préfère (avec la manip cité plus haut) car cela leur permet d'avoir une application avec un seul fichier...

    Citation Envoyé par seiryujay
    Pourquoi est-ce que mes jar ne sont plus intégrées dans le jar de mon appli? (mais ça, je pense pas que vous puissiez beaucoup m'aider...)
    Aucune idée la-dessus...

    Citation Envoyé par seiryujay
    - A la limite, je suis aussi preneur pour un site sur la création de jar... (que faut-il y mettre, que ne faut-il pas y mettre, etc)
    Même liens que ci-dessus...

    Pour faire simple, tu y mets :
    • Tes classes (en respectant la hierarchie des packages).
    • Et tous les fichiers que tu souhaites, que tu peux éventuellement lire depuis ton application via getClass().getResource()...
    • Un manifest (si tu n'en met aucun, il y en aura automatiquement un vide).


    a++

  12. #12
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Citation Envoyé par seiryujay
    - Déjà, est-ce que tu connaitrais un site qui explique le fonctionnement du MANIFEST? (ce qu'il doit contenir, ne doit pas contenir, comment le stucturer, etc)
    Jar File Spécifications

  13. #13
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par adiGuba
    Les 2 : ton jar ne doit normalement contenir que tes classes et tes ressources (images, etc...).
    Tous ce qui est référencé par l'attribut Class-Path doit se trouver en dehors du jar...
    Ok, mais alors je vais faire mon lourdot, si ça vous dérange pas (parce que j'ai bien envie de comprendre tout ça...)
    Pourquoi sous Eclipse, on peut faire du "Add JARs" qui permet d'inclure des jar qui seront présents dans le jar final de l'appli et "Add external JARs" qui permet d'inclure des jar qui ne seront pas dans le jar final?...
    Au départ, on utilisait "Add jars" et on pouvait utiliser toute l'appli rien qu'en double-cliquant sur le jar final. Toutes les librairies étaient inclues dans le jar final et on pouvait lancer le jar depuis n'importe où, il était autonome... Alors qu'avec du "Add external jars", ce n'est plus le cas, me semble-t-il...


    Merci pour votre patience
    Mon problème initial est résolu, maintenant c'est juste la compréhension des mécanismes mis en jeu...
    Je vais potasser vos 2 docs, mais si vous avez des explications toutes faites, je suis preneur aussi

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Could not find main class
    Par firgon dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 21/10/2008, 15h48
  2. Réponses: 7
    Dernier message: 17/03/2008, 08h35
  3. JVM : Could Not Find Main Class
    Par Mythrandil dans le forum Langage
    Réponses: 6
    Dernier message: 06/09/2007, 12h13
  4. Réponses: 5
    Dernier message: 01/08/2007, 15h07
  5. Réponses: 6
    Dernier message: 17/04/2005, 10h58

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