Distribuer une application java ?

greenthumb -  
 greenthumb -
Bonjour,

Je vous explique mon souci :

J'ai développé une application Java. J'en ai ensuite fait un .jar. Cette application est placée sur un disque dur accessible pour plusieurs personnes. Lorsque je lance cette application depuis mon poste, tout se passe très bien, mais lorsque je lance cette application depuis un autre poste, elle ne se lance pas, l'erreur suivante apparait à l'écran : "Could not find the main class, program will exit !" Je ne comprends vraiment pas d'où vient le problème, puisque de mon poste l'application se lance très bien, le main est trouvé sans aucun souci. Cela fait maintenant 3 jours que je suis sur ce problème, je commence vraiment à désespérer...

Est-ce que quelqu'un aurait une solution à m'apporter ?
Merci :)
Configuration: Windows 2000
Firefox 3.0.4

30 réponses

  • 1
  • 2
Résumé de la discussion

Une application Java empaquetée en jar affiche l'erreur Could not find the main class lorsque lancée depuis un autre poste, alors qu'elle démarre correctement sur le poste de développement. La cause fréquente est une hiérarchie des packages mal respectée dans le jar ou un manifest MANIFEST.MF incorrect, ce qui empêche le moteur Java de localiser la classe principale. Pour corriger, reconstruire le jar avec une structure de répertoires qui reflète les packages et inclure un Main-Class précis dans le manifest, soit par Eclipse export, soit par une commande Ant ou jar. En cas de doute, vérifier que le jar conserve une hiérarchie réelle en l’ouvrant dans un outil d’archive et en constatant que les fichiers .class apparaissent selon les paquets.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. sandul Messages postés 4013 Statut Membre 723
     
    Bonjour,

    As-tu inclus un manifest dans le jar? Est-ce que tu as une variable classpath définie sur ton PC (mais pas sur les autres)?

    En règle générale, c'est une mauvaise idée de distribuer une appli à travers un partage réseau.

    ++
    0
  2. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Surtout une java.

    Encore que si il n'a pas trop de monde il peut la déployer sur chaque PC.
    0
  3. greenthumb
     
    Merci pour vos réponses :-)

    Alors arth, je ne peux pas déployer cette application sur chaque PC, car il y a beaucoup de postes, et de plus les personnes pouvant accéder à ce disque sont dispersées un peu partout en france... ^^

    Sinon, dans le dossier contenant mon .jar (et mon projet Eclipse), il y a un fichier .classpath, mais pas de MANIFEST.MF... est-ce que je dois le créer manuellement puis reconstruire le .jar ?
    0
  4. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Tu bosses donc dans une grande boîte non?

    Vous avez pas un outil de distrib à grande échelle type Citrix?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sandul Messages postés 4013 Statut Membre 723
     
    Inclure le manifest. Ou bien (mieux) utiliser java web start. Comme ça plus de souci lorsque l'appli sera modifiée, cette technique permet un effort de déploiement zéro.
    0
    1. greenthumb
       
      je viens de me renseigner sur Java Web Start, c'est intéressant :-) Mais si j'ai bien compris il permet de lancer l'application depuis le Web, mais mon application se trouve sur un disque dur... désolé si j'ai un peu de mal à comprendre :-)
      0
      1. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296 > greenthumb
         
        Rien ne t'empêche de mettre un serveur web sur ton poste et de proposer le fichier jnlp correspondant sur celui si.
        0
      2. sandul Messages postés 4013 Statut Membre 723 > greenthumb
         
        Il te faut un serveur http (IIS ou Apache ou autre) accessible depuis les autres postes. Pas besoin qu'il soit accessible depuis l'extranet. Et pas besoin non plus de lancer l'appli depuis un navigateur (mais tu peux).

        ++
        0
  7. greenthumb
     
    Oui, je travaille dans une banque :-)

    Effectivement, on a un outil de distrib, mais j'ai pas l'habilitation pour ajouter des choses dans cet outil... c'est nul hein ? ^^
    0
  8. sandul Messages postés 4013 Statut Membre 723
     
    Ui, très nul.... Envoie au big boss un message avec /revolt comme sujet =)
    0
    1. greenthumb
       
      lol je ne suis qu'un petit stagiaire, faut pas que je fasse n'importe quoi ^^
      0
  9. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Non ,mais tu peux en effet demander si elle peut être distribuée via cet outil.

    Par contre c'est pas dit que ce soit validé, et même si ca l'est ça va prendre du temps, surtout dans une banque.
    0
    1. greenthumb
       
      arf, malheureusement c'est assez urgent ^^
      0
  10. sandul Messages postés 4013 Statut Membre 723
     
    arf, malheureusement c'est assez urgent ^^ <== ça se fait en 15 minutes top chrono, install d'Apache comprise ^^
    0
  11. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Et encore c'est à cause qu'Apache est lent à l'install ^^
    0
    1. sandul Messages postés 4013 Statut Membre 723
       
      Mdrrrrrrrrrrrrrr
      0
  12. greenthumb
     
    Sinon je vais tenter de reconstruire le .jar en incluant le MANIFEST que j'aurais créé. Je ferais ça la semaine prochaine, l'heure du week-end approche à grands pas ^^
    En tout cas merci beaucoup pour votre disponibilité :-)
    Je vous tiendrais au courant de l'évolution ;)
    0
    1. sandul Messages postés 4013 Statut Membre 723
       
      Yup... Bon WE à toi :-)
      0
  13. arth Messages postés 84 Date d'inscription   Statut Contributeur Dernière intervention   1 296
     
    Pareil!
    0
  14. greenthumb
     
    re :-)

    Alors j'ai recréé le fichier JAR en incluant le MANIFEST, mais rien n'y fait, je suis toujours au même point... J'en ai discuté avec un collègue qui connait le sujet, et en fait apparemment c'est parce-que mon poste n'est pas compatible avec les autres... bref c'est la m**** ^^
    0
  15. sandul Messages postés 4013 Statut Membre 723
     
    Re,

    Après le rajout du manifeste dans le jar: quel message d'errur sur les autres postes? Toujours "Could not find the main class, program will exit" ? Si oui, le manifest n'est pas correct (poste-le ici, en remplaçant éventuellement les noms de ton société et ton produit par xxx / yyy s'ils apparaissent).

    ++
    0
  16. greenthumb
     
    En effet, c'est toujours l'erreur "Could not find the main class, program will exit"
    Voici mon MANIFEST :

    Manifest-Version: 1.0
    Class-Main: src.lcl.acl.program.MainClass
    0
  17. sandul Messages postés 4013 Statut Membre 723
     
    Bon,

    Il faut mettre "Main-Class", pas "Class-Main". Et éventuellement une autre ligne Class-Path avec au moins un point dedans et d'autres choses si tu fais appel à des bibliothèques tierces.
    Manifest-Version: 1.0
    Main-Class: src.lcl.acl.program.MainClass
    Class-Path: .
    ++
    0
  18. greenthumb
     
    hum hum... c'est ce qu'on appelle... une erreur de débutant ^^

    j'utilise plusieurs bibliothèques, je crée plusieurs lignes Class-Path ou je met tout sur la même ligne, séparé par une virgule ? (oui désolé je suis pas très malin... ^^)
    0
  19. sandul Messages postés 4013 Statut Membre 723
     
    Sur une même ligne avec un blanc comme séparateur (pas une virgule). Fais un retour à la ligne à la colonne 78 sans te soucier si tu coupes ou pas le nom de tes bibliothèques et commence la nouvelle ligne par un blanc. Exemple de Class-Path:
    Class-Path: . connector.jar com.ibm.mq.jar ojdbc14.jar jni.jar xercesImpl.jar
     xml-apis.jar log4j-1.2.14.jar jdom.jar jasperreports-2.0.4.jar itext-1.3.1.j
     ar commons-logging-api-1.0.2.jar commons-logging-1.1.jar commons-digester-1.
     7.jar commons-collections-3.0.jar commons-dbcp-1.2.1.jar commons-pool-1.2.ja
     r jtds-1.1.jar jsiv-2.5.0.jar activation-1.1.jar commons-beanutils-1.7.0.jar
      commons-codec-1.3.jar commons-logging-1.1.jar jaxws-api-2.0.jar jaxen-1.1-
     beta-9.jar mail-1.4.jar saaj-api-1.3.jar saaj-impl-1.3.jar spring-1.2.6.jar 
     stax-api-1.0.1.jar wsdl4j-1.6.1.jar wstx-asl-3.2.0.jar xbean-2.2.0.jar xbean
     -spring-2.8.jar xfire-aegis-1.2.6.jar xfire-annotations-1.2.6.jar xfire-core
     -1.2.6.jar xfire-java5-1.2.6.jar xfire-jaxws-1.2.6.jar xfire-spring-1.2.6.ja
     r xfire-jsr181-api-1.0-M1.jar XmlSchema-1.1.jar commons-httpclient-3.0.jar o
     rg.mortbay.jetty-5.1.3.jarxfire-jaxb2-1.2.6.jar jaxb-api-2.0.jar jaxb-impl-2
     .0.1.jar jaxb-xjc-2.0.1.jar 


    ++
    0
  20. greenthumb
     
    Merci beaucoup :-)

    Dernière petite question : la ligne Main-Class doit indiquer le fichier main.class ou main.java ? Je m'embrouille :S
    0
  21. sandul Messages postés 4013 Statut Membre 723
     
    Le main tout court (sans .java ni .class)

    Fais un essai sur ton poste:
    1. tu ouvres une boîte DOS
    2. tu tapes
    set classpath=
    pour annuler la variable d'environnement classpath (si elle est définie)
    3. tu exécutes ton fichier avec
    java -jar nom_de_ton_jar.jar

    ==> cela devra s'exécuter sans problème. Si tu fais appel à d'autres bibliothèques: ou bien tu les mets dans le même dossier que ton jar contenant la classe main (le plus simple) ou bien ailleurs (mais en ce cas il faudra adapter le Class-Path dans le manifest avec des chemins relatifs).

    ++
    0
  • 1
  • 2