fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008
-
4 mars 2008 à 17:03
Utilisateur anonyme -
9 mars 2008 à 10:58
Bonjour à tous,
Je travaille sous Eclipse. Mon projet s'appel "backup". ma class principale s'appelle "Backup" (ellse se trouve dans le package "principal").
J'exporte vers un .JAR
je précise la class qui contient mon main().
Il me crée un .JAR
Seulement quand je l'éxécute il me met le message d'ereur : "Could not find the main class. Program will exit."
Or mais version de JRE sont bien les mêmes dans Eclipse et sous windows.
Deplus quans je compile en test sous Eclipse (avec la fleche verte) il n'y a aucun problème.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 4 mars 2008 à 18:06
Salut,
tu as bien renseigné cette classe (celle qui contient le main) dans le champ "Main-Class" du fichier MANIFEST.MF de ton jar afin de rendre ton jar exécutable ?
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 4 mars 2008 à 18:10
En fait je n'ai pas toucher au manifest, je ne sais pas trop ce que c'est.
J'ai choisit l'option générer manifeste en pensant que je n'avais pas besoin de m'en occuper
Quand tu utilises la fonctionnalité "Export" sous Eclipse pour faire un JAR, tu dois lui préciser l'endroit où se trouve la classe qui contienne la méthode main pour qu'il produise un manifeste avec le champ "Main-Class" renseigné correctement. Regarde dans la dernière fenêtre qui s'affiche avant de finir la génération de ton JAR, cette fenêtre s'appelle "JAR Manifest Specification". Tout en bas, il y a écrit :
"Select the class of the application entry point:
Main class:
".
Clique sur le bouton "Browse..." et indique lui où se trouve ta classe qui contient la méthode main, ce n'est pas bien dur.
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 5 mars 2008 à 16:17
Je vous remercie mias je génère automatiquement le manifest donc théoriquement je n'ai pas à m'en occuper nan ?
Et je précise déjà bien mon main gouessej ...
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 5 mars 2008 à 16:34
Salut,
"Je vous remercie mias je génère automatiquement le manifest donc théoriquement je n'ai pas à m'en occuper nan ?"
>Oui pour faire un simple jar.... mais pour le rendre executable aux yeux de la JVM il faut lui dire quelle classe contient le main... elle ne fera pas cette recherche pour toi donc il faut lui donner un coup de pousse...
[auteur/GOUESSEJ/684669.aspx gouessej]> Je te conseil fortement d'oublier cette solution et de passer uniquement par les scripts ant (build.xml) qui ont moins de contraintes, sont beaucoup plus puissant et plus simple d'utilisation....
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
[auteur/FGRAFF/1161763.aspx fgraff]
, non, tu dois t'en occuper sinon je ne te le préciserais pas! J'ai déjà eu le même message d'erreur et je sais très bien pourquoi ça t'arrive. [auteur/TWINUTS/43739.aspx Twinuts] et moi t'avons déjà dit que tu dois indiquer où se trouve ta classe main.
[auteur/TWINUTS/43739.aspx Twinuts], tu sais très bien que je ne me sers pas d'Eclipse pour faire mes archives Java, je l'ai fait une ou deux fois pour aider un étudiant. Je n'ai jamais utilisé Eclipse pour faire les archives Java pour T.U.E.R, j'ai utilisé la bonne vieille ligne de commande, des scripts shell puis depuis quelques mois des scripts ANT non seulement pour compiler le jeu, produire l'archive Java, lancer le jeu et les programmes intermédiaires (qui produisent certains fichiers de données et qui permettent de tester l'affichage des modèles au format MD3) et enfin produire l'archive compressée au format ZIP contenant l'ensemble des sources du jeu avec les fichiers de données canoniques non générables.
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 6 mars 2008 à 10:28
On doit mal se comprendre lol.
Je fais générer automatiquement le manifest (c'est la première option) et dans le champs en bas de la derniere fenetre je précise évidemment ou se trouve ma class main donc ou est ce que je dois la préciser d'autre si ca ne suffit pas ???
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 6 mars 2008 à 10:39
Donc voila dans l'archive j'ai un dossier META-INF
dedans il y a mon manifest qui contient :
Manifest-Version: 1.0
Main-Class: principal.Backup
Sinon dans l'archive il y a tous mes dossiers (mes packages)
le .classpath, .project, org.eclipse.jdt.ui.prefs, mes images , mon fichier xml, un un .exe que j'utilise.
Le fichier manifeste semble bon. Regarde si le fichier principal.Backup.class est bien dans ton JAR. Es-tu sûr que cette classe contient bien une méthode public static void main(String[] args){...} ?
D'autre part, un fichier .exe, ce n'est pas portable, ça ne sert à rien de faire du Java si tu fais des choses qui ne peuvent tourner que sous Windows. Ca veut dire que ton programme ne marchera ni sous Unix Solaris, ni sous Linux, ni sous Macintosh.
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 6 mars 2008 à 12:39
Oui principal.Backup.class est bien dans mon .JAR ...
Sinon mon exe ne sert que sous windows. En fait sous windows plus précisément pour les utilisateurs de Outlook, ce la pause problème puisque je ne peux pas copier les fichier outlook quand le programme est lancé. je dois donc le fermer. J'ai fai un .bat puis un .exe pour ca. mais bon s'il y a une possibilité en java pourquoi pas ?
Je crois savoir d'où ça vient mais je vais avoir du mal à t'aider. Une des ressources que tu appelles dans ton programme n'arrive pas à être chargée donc ça fait échouer le chargement de la classe. Il arrive que certains IDE paramètrent le JAR de façon à ce que tu puisses le lancer en les utilisant mais pas autrement.
Tu fais appel à org.eclipse.jdt.ui.prefs, il faut donc trouver un moyen pour mettre dans ton JAR ou bien à côté les ressources nécessaires qui sont chargés là dedans sinon ça ne va pas marcher.
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 6 mars 2008 à 17:10
Bon alors voila j'ai fait "java Backup" pour essayer a la main (c'est ma classe qui contient le main) et voila le reultat -->
Exception in thread "main" java.lang.NoClassDefFoundError: Backup (wrong name:
rincipal/Backup)
at java.lang.ClassLoader.defineClass1(Native Method)
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 6 mars 2008 à 19:15
Salut,
bon pour faire simple :
tu créer un fichier nommé
'build.xml' (à la racine de ton projet) ensuite tu y colles le contenu
ci-dessous (pense à adapter le champs main-class) enfin tu fais un clic
droit dessus (apres sauvegarde)-> Run As ->Ant Build et pouf le
jar est généré avec Ant....
<?xml version="1.0" encoding="UTF-8"?>
<target name="packaging">
<delete file="${jar.name}" />
<!-- =================================================================== -->
<!-- Generation de l'archive jar -->
<!-- =================================================================== -->
<jar jarfile="${jar.name}" basedir="./bin"> <!-- remplace
le ./bin si tes classes ne sont pas dans le rep bin -->
<manifest>
</manifest>
</jar>
</target>
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
fgraff
Messages postés19Date d'inscriptionmardi 2 octobre 2007StatutMembreDernière intervention15 avril 2008 8 mars 2008 à 14:53
Bon alors en fait j'ai trouvé d'où vient mon problème.
il vient de JDOM tou fonctionne bien (sauf les images) quand je n'utilise pas JDOM avez vous une idée ?
et ppour les images ?