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 :

[Info]éxécution de fichiers jar ? common-launcher ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut [Info]éxécution de fichiers jar ? common-launcher ?
    salut
    j'ai un probleme avec l'exécution des fichiers .jar, en fait j'ai une application que j'ai developpé, j'ai généré le fichier jar, le probleme c'est que il ne s'execute pas, ce .jar en fait a des dependences, notemment un autre .jar (jdom) pour la manipulation des fichiers xml
    j'ai tenté toute sorte de solution, je travaille sur windows, j'ai mis le chemin de jdom.jar comme variable d'environnement, j'ai utilisé java -classpath .. -jar ... (qui ne marche pas car l'option -jar annule -classpath), j'ai défini dans le manifest du .jar la ligne suivante : Class-Path:le chemin de jdom.jar, bref, j'ai tout tenté, mais ça ne marche pas, il y a tjrs cette erreur comme qoi des classes n'ont pas été trouvée (des classes de jdom)
    j'ai lu récemment que jakarta common launcher permet de gerer l'execution des applications, je me suis rendu sur le site http://jakarta.apache.org/commons/launcher/
    mais j'ai pas trouvé de documentation, pas d'exemples, juste la javadoc !!
    est ce que quelqu'un peut d'abord me renseigner sur l'exécution de fichiers jar, et puis sur cet outil de jakarta ?
    merci bcp

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Hello,

    moi je fait comme cela pour packager un jar contenant plusieurs jar

    - décompresse tous les jar externes dans un répertoire (avec winzip ou winrar, car un jar n'est rien d'autre qu'un zip)
    - ajoute tes classes compilées
    - crée le manifest standard dans le rep META-INF
    - rezip le tout et met une extension jar

    De cette manière, pas besoin de bidouiller le classpath ni les variables d'environnement. Il existe sûrement un autre moyen mais c'est celui-là que j'utilise pour pas me prendre la tête


  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    ta solution parait un peut detourné ceci va rendre le jar volumineux, de plus, suppose que le jar que je veux créer requiert 20 .jar comme dependences , c bcp de travail non ??

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Une methode pour inclure automatiquement des fichiers JAR a l'execution est de les placer dans le repertoire /lib/ext du JRE (celui de Windows pour l'execution en temps normal ET celui du JDK quand on develloppe). Attention a ne pas oublier de deplacer ces JAR lors du changement de version.

    A partir de Java 6 on pourra definir un CLASSPATH avec un wildcard ; ex :
    CLASSPATH=C:\libexternes\*
    alors que pour le moment il faut lister les fichiers JAR manuellement un par un.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Par défaut
    pourquoi ca ne marche pas en mettant :

    Class-Path : path/jdom.jar

    dans ton manifest ??


    pour la solution lib/ext c'est vraiment dangereux car si d'autres prog java utilisent la meme jre, ils devront aussi utiliser ton jdom !

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Ca n'a absolument rien de dangereux et ca s'appelle le Java Extension Mechanism (voir aussi ici).
    Et si conflit de version il y a avec plusieurs JAR d'un même lib; ce genre de problème se produite également lorsqu'on déclare manuellement les JAR dans une variable CLASSPATH au niveau système.

    Classes within JAR files in this directory can be used by applets and applications much as if they were part of the set of bootstrap classes, without having to explicitly include them in the class path.
    Any set of packages or classes can easily be made to play the role of an extension. The first step in turning a set of classes into an extension is to bundle them in a JAR file. Once that's done, you can turn the software into an extension in two ways:
    - by placing the JAR file in a special location in the directory structure of the Java Runtime Environment, in which case it's called an installed extension.
    - by referencing the JAR file in a specified way from the manifest of the another JAR file, in which case it's called a download extension.
    This lesson shows you how the extension mechanism works by using a simple "toy" extension as an example.
    Voir aussi la 2nde solution proposée par le didacticiel (nommer explicitement le JAR dans le manifest) ; mais bon il dit que pour lui ca ne fonctionne pas (la casse est-elle bonne ? le fichier mentionné est'il dans le CLASSPATH ?).

    Ensuite une classe n'est utilisée que si elle est explicitement appelée qq part. Un programme Java lambda ne va pas magiquement charger un JAR en mémoire et utiliser son code si nulle part il ne fait appel aux classes contenues dans ce JAR.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Il y a aussi une target ant qui permet d'inclure automatiquement des jars dans un jar .. je ne me rappelle plus du nom mais une recherche sur le forum devrait donner des resultats je pense.

    [Edit]

    Tant que j'y suis:

    J'aime pas la methode qui consiste a coller des libs dans lib\ext.

    Au bout d'un moment on ne sait plus si une lib dans ce rep est utilisee ou pas, ca devient un vrai foutoir ..

    Ca suppose que toutes les applis sur ce poste utilisent la meme version des libs installees dans lib\ext. Si on installe une nouvelle appli avec une version non compatible d'une lib deja presente dans lib\ext on fout tout par terre.

    J'aime pas la methode qui consiste a coller dans le jar de l'appli les classes des autres jars.

    Si tu veux mettre a jour une des libs (bug fix par exemple) tu es oblige de recreer ton jar, pas pratique.

    Si tu as plusieurs applis qui utilisent le meme jar elles ont toutes les classes incluses dans leur jar, bonjour la place de perdue.

    Moi ce que je fais c'est que je lance mon appli via un script qui positionne le CLASSPATH correctement, mais apres chacun sa sauce.

    [/Edit]

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Par défaut
    Citation Envoyé par bouye
    Ca n'a absolument rien de dangereux et ca s'appelle le Java Extension Mechanism (voir aussi ici).
    Et si conflit de version il y a avec plusieurs JAR d'un même lib; ce genre de problème se produite également lorsqu'on déclare manuellement les JAR dans une variable CLASSPATH au niveau système.

    Classes within JAR files in this directory can be used by applets and applications much as if they were part of the set of bootstrap classes, without having to explicitly include them in the class path.
    Any set of packages or classes can easily be made to play the role of an extension. The first step in turning a set of classes into an extension is to bundle them in a JAR file. Once that's done, you can turn the software into an extension in two ways:
    - by placing the JAR file in a special location in the directory structure of the Java Runtime Environment, in which case it's called an installed extension.
    - by referencing the JAR file in a specified way from the manifest of the another JAR file, in which case it's called a download extension.
    This lesson shows you how the extension mechanism works by using a simple "toy" extension as an example.
    Voir aussi la 2nde solution proposée par le didacticiel (nommer explicitement le JAR dans le manifest) ; mais bon il dit que pour lui ca ne fonctionne pas (la casse est-elle bonne ? le fichier mentionné est'il dans le CLASSPATH ?).

    Ensuite une classe n'est utilisée que si elle est explicitement appelée qq part. Un programme Java lambda ne va pas magiquement charger un JAR en mémoire et utiliser son code si nulle part il ne fait appel aux classes contenues dans ce JAR.

    Exemple vécu : un projet met Xerces dans le lib/ext, mon projet a absolument besoin du crimson de java -> nické je ne peux pas dire de ne pas utilisé Xerces ! lib/ext est fait pour des extensions Sun normalement.

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par jcarre
    est fait pour des extensions Sun normalement.
    Non, et c'est suffisement explicite dans la documentation et le didacticiel fournis par Sun. Il 'agit d'une facilite pour la mise en place (par un utilisateur moyen lambda) d'une lib sur le CLASSPATH.
    En cas de conflit si utilisation en tant qu'extensions "installees", libre a toi d'utiliser une autre methode alternative (extension "downloaded), inclusion directe ou script. Toutes ces solutions sont valides mais ont chacune leur avantages et inconvenients.
    La solution appropriee definitive est probablement un melange de toutes celles-ci (suivant les besoins de l'appli et les capacites de l'utilisateur/installeur).

    Vous noterez qu'on a exactement les meme problemes qu'avec les DLL sous Windows (et dans une moindre mesure les lib sous UNIX, bien qu'en general leur nom soit versionne). Placer le DLL dans l'un des repertoire de Windows (~lib/ext) ou dans le PATH (~CLASSPATH) ou inclure avec l'appli (dans son rep a elle ou directement en liaison statique~dans le JAR) ou modifier le PATH (~CLASSPATH) via un script avant execution... rien de nouveau sous le soleil ca a toujours ete le pb des bibliotheques dynamique (prevue a l'orgine pour etre utilisees en "singleton" pour economiser de la place sur le disque).

    Perso j'utilise lib/ext mais je lui vois 2 gros defauts :
    - l'encombrement comme l'a indique bulbo
    - le fait de devoir deplacer les lib manuellement lors du changement de version de JVM

    J'attend avec impatience la declaration en wildcards de Java 6, qui va me permettre de placer toutes ces libs dans un rep partage ailleurs que dans le JRE et d'utiliser une * pour la declaration de mon CLASSPATH mais ceci ne reglera en rien les conflits potentiels inherents a l'utilisations de lib dynamiques.

    En ceci l'utilisation de Java Web Start est peut-etre plus appropriee pour 1) telecharger automatiquement les JAR necessaires et 2) au besoin (a verifier) isoler les lib pour eviter des conflits de version. Notez que les dernieres versions de Windows font aussi de l'isolation quand il y a plusieurs versions d'un meme DLL.

    EDIT - corrections minimales dans les phrases du debut.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Citation Envoyé par bouye
    Une methode pour inclure automatiquement des fichiers JAR a l'execution est de les placer dans le repertoire /lib/ext du JRE (celui de Windows pour l'execution en temps normal ET celui du JDK quand on develloppe). Attention a ne pas oublier de deplacer ces JAR lors du changement de version.

    A partir de Java 6 on pourra definir un CLASSPATH avec un wildcard ; ex :
    CLASSPATH=C:\libexternes\*
    alors que pour le moment il faut lister les fichiers JAR manuellement un par un.
    effectivement c'est une très amélioration très interessante 8)

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    pour ce qui est de mettre les .jar dans lib/ext du jre, ça marche
    mais le truc de déclarer le fichier requis dans le manifest ne marche pas pour moi, en fait, je travaille dans eclipse, durant la phase de développement pas de problème tout marche bien, mais, lorsque je génére le fichier jar, alors là ça pèche, il n y a pas un option dans l'assistant de création qui nous demande si on veut mettre dans le classpath qq chose, ce qui fait que, je génére dans un premier tant mon fichier jar sans définition du classpath (pas de ligne Class-Path:..", ensuite j'ouvre le jar généré avec winrar, et je modifie le manifest à la main, ensuite je ferme et je tente d'éxécuter mon application, et là ça ne marche pa

  12. #12
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Je te rassure j'ai exactement le meme pb avec JBuilder.
    Inclure un JAR dans un JAR, il ne connait pas. Et si on definit un JAR en tant que lib utiliser par le prog alors il recopie tout son contenu dans l'archive au lieu d'inclure le JAR...

    Dans le cas ou tu arriverai a faire fonctionner la solution des extensions "telechargees", si tu jamais dois signer tes JAR (pour distribution via JavaWebStart ou pour Applet avec droit speciaux), il faut modifier le manifest AVANT de signer l'archive
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    Citation Envoyé par bouye
    Je te rassure j'ai exactement le meme pb avec JBuilder.
    Inclure un JAR dans un JAR, il ne connait pas. Et si on definit un JAR en tant que lib utiliser par le prog alors il recopie tout son contenu dans l'archive au lieu d'inclure le JAR...

    Dans le cas ou tu arriverai a faire fonctionner la solution des extensions "telechargees", si tu jamais dois signer tes JAR (pour distribution via JavaWebStart ou pour Applet avec droit speciaux), il faut modifier le manifest AVANT de signer l'archive
    je n'ai rien compris dans tous ce que tu viens de dire !!

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Si tu modifies le manifest, signe (numeriquement) le JAR apres la modification.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Février 2006
    Messages : 7
    Par défaut
    comment le faire ?

  16. #16
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Voici une autre solution pour rassembler tous les jar en un seul: fat jar


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

Discussions similaires

  1. Exception de securité sur l'éxécution d'un fichier .jar
    Par iaiiai dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 29/10/2012, 15h20
  2. [jar] Comment modifier un fichier jar
    Par newfsch dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/07/2004, 14h25
  3. [Jar]comment creer un fichier JAR?
    Par ed_hunter dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 24/05/2004, 11h44
  4. Récupérer les infos sur un fichier audio
    Par Halleck dans le forum Windows
    Réponses: 13
    Dernier message: 17/04/2004, 18h39
  5. creation d un fichier jar ou .exe en java
    Par sadjia dans le forum JBuilder
    Réponses: 13
    Dernier message: 13/12/2002, 16h01

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