Java JAR classpath

cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013 - 22 nov. 2010 à 14:41
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 22 nov. 2010 à 17:21
Bonjour,

J'ai un projet sur java , le but est créer un jar exécutable, pour pouvoir l'exécuter en ligne de commande.

J'ai suivi les tuto trouvé sur le net , j'ai créer mon JAR en pointant le main de ma class.

Ce projet Java utilise beaucoup de JAR externe , dans un premier temps j'ai inclus aussi ces JAR externe dans le JAR globale du projet.

Le but est d'ensuite prendre ce JAR et pouvoir l'exécuter sur n'importe quel poste de travail.

Voici ma ligne de commande :

java  -jar CIX.JAR D:\Projets\CIX\var\desens\jamming_params.xml D:\Projets\CIX\var\desens\0000128_OUT_REJ
D:\Projets\CIX\var\desens\out


La fonction main du JAR possède 3 arguments .

J'ai pourtant ce message d'erreur ;
Failed to load Main-Class manifest attribute from jar file

J'ai fait des recherches sur le net, en me précise de rajouter les classpath associé aux différents JAR externe utilisé , je ne vois pas l'intéret puisque lors de la création du JAR , j'ai inclus les JAR externe.

Je suis un peu perdu !!!!

Merci d'avance pour votre aide

5 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 nov. 2010 à 15:47
Salut,

Si tu utilises l'IDE eclipse, il existe la plugin fatjar qui fera tout cà pour toi.

C'est beaucoup plus compliqué qu'il n'y parait d'inclure des jar dont dépend ton projet au sein du jar de ton application.

En théorie, les jar sont censés être des bibliothèques partagées par tout les programmes java. Ils sont censés être déployés dans le dossier lib de l'installation du jre. Ainsi, tu n'as pas 10 versions de la même bibliothèque sur le disque, et il est plus simple de gérer les mises à jour.

Après en pratique, on se rend compte que la plupart des programmes java déploie leurs propres jar dans le dossier d'installation du programme (ce qui est plus simple, certes, mais va à l'encontre du principe de bibliothèque partagée).

Tout mettre dans un jar... c'est pire, si tu mets à jour ton jar principal, tu es obligé d'envoyer tout les jars dont dépend ton application à chaque mise à jour, alors que si tu les déploie dans un dossier à part, tu n'as qu'à envoyer le jar de ton application.

Après, c'est à toi de voir la solution que tu veux garder.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013
22 nov. 2010 à 16:23
Merci pour tes conseils !

J'ai donc créer un JAR qui contient uniquement mes codes sources.
J'ai mis dans le répertoire lib de jre , les JAR dont dépendantes mon projet.

Je ré exécute mon JAR et j'ai la même erreur !!!

Je ne sais pas comment faire pour que lors de l'exécution du JAR, celui ci pointe vers les JAR externe du repertoire JRE .

Peux etre au niveau du classpath !?

J'ai mis :
java -classpath CIX.jar .... (avec les arguements qu'il faut !!)

J'ai essayé de mettre dans ma variable système CLASSPATH qui pointe vers le dossier lib de la JRE mais ca ne marche pas !!

Merci pour ton aide !!!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 nov. 2010 à 16:35
Salut,

Je te laisse aller voir ce petit cours trouvé sur google :
http://tecfa.unige.ch/guides/tie/html/java-util/java-util.html

Et en particulier la slide suivante :
http://tecfa.unige.ch/guides/tie/html/java-util/java-util-3.html#pgfId-1000037148
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
cs_Taz1984 Messages postés 47 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 13 mars 2013
22 nov. 2010 à 17:07
salut,

J'ai suivi les explications , j'ai compris théoriquement comment ca devrait fonctionner je te remercie, par contre j'ai testé et ca ne marche toujours pas,

J'aurai souhaiter savoir comment faire pour connaitre ce qui manque exactement ?!!


U:\>java -jar CIX.jar U:\desens\jamming_params.xml U:\desens\0000128_OUT_REJ U:\
desens\out
Exception in thread "main" java.lang.NoClassDefFoundError: net/atos/mm/fwk/boots
trap/BootStrapException
        at com.atosworldline.cix.common.tools.AccountNumberJamming.main(AccountN
umberJamming.java:1074)


J'ai pourtant bien configué :
U:\>echo %CLASSPATH%
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;D:\Projets\CIX\lib


j'ai rajouté le répertoire D:\Projets\CIX\lib qui contient toutes les librairies de mon projet.


J'ai bien l'erreur a la ligne 1074 mais je n'en sais pas plus, comment faire pour avoir plus d'info sur l'erreur ?

Merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
22 nov. 2010 à 17:21
Salut,

L'erreur veut dire qu'il ne trouve pas la classe BootStrapException du package net.atos.mm.fwk.bootsrap qui est très certainement utilisé pour la première fois à la ligne 1074 de ta classe AccountNumberJamming dans la fonction main.

Assure toi que le jar de cette bibliothèque se trouve bien dans les dossiers que tu as défini dans ton classpath.

Personnellement, je préfère fixer le classpath lors du lancement du jar par un fichier bat par exemple (java -classpath=... tonjar.jar) ainsi tu ne dépends pas d'une variable système qui peut être modifiée par erreur.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
Rejoignez-nous