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

Eclipse Java Discussion :

ClassPath incorrect en dehors de Eclipse


Sujet :

Eclipse Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut ClassPath incorrect en dehors de Eclipse
    Bonjour,

    Je rencontre un problème relatif à l'exécution d'un jar en dehors d'éclipse. Je m'explique : je travaille sur un projet nécessitant un grand nombre de dépendances (environ une cinquantaine de jars). La compilation de mon projet se fait sous maven 2, mon POM étant paramétré pour me créer un fichier manifest contenant toutes les informations nécessaires (Jars du classpath, classe main du projet, etc..).
    La compilation fonctionne bien, mon jar est correctement généré, avec un manifest correct.

    Lorsque je lance l'exécution de mon jar à l'aide de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -jar mon_projet.jar
    l'exécution du projet se lance correctement et les dépendances se font bien (typiquement, si je fait un appel à un logger définis dans la librairie log4j, l'appel se fait correctement).

    Mon problème est le suivant : j'utilise le microcontainer JBoss afin de déployer des EJBs 3 en dehors d'un serveur d'application. La commande de déploiement de ce microcontainer est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EJB3StandaloneBootstrap.scanClasspath("jar_contenant_les_EJBs_à_déployer");
    Or, lorsque j'exécute ce projet dans éclipse, mon microcontainer trouve bien mon jar contenant mes EJBs à déployer, tandis que lorsque je l'exécute en dehors d'éclipse, mon projet ne voit pas cette dépendance. J'ai cherché à voir si la variable classpath était la même ou pas dans les deux types d'exécution (dans et en dehors d'éclipse), en intégrant la portion de code suivant dans les premières lignes de mon projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Properties prop = System.getProperties();
            System.out.println("java.class.path now = " + prop.getProperty("java.class.path"));
    Le problème semble donc venir de là : lorsque mon projet est exécuté dans Eclipse, ma variable ClassPath contient la liste des toutes mes dépendances (lib1.jar;lib2.jar, etc...) tandis que lorsque je l'exécute en dehors d'éclipse, ClassPath contient uniquement le jar de mon projet (mon_projet.jar) sans aucune dépendance (alors même qu'a l'exécution, les dépendances sont trouvées, je n'ai aucune ClassNotFoundException). Mon "EJBs jar" n'est donc pas trouvé par mon microcontainer car il n'est pas contenu dans le classpath. J'ai donc tenté d'exécuter mon projet en dehors d'éclipse en utilisant l'option -cp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp lib1.jar;lib2.jar -jar mon_projet.jar
    ou l'option -classpath
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath lib1.jar;lib2.jar -jar mon_projet.jar
    cela n'a rien donné !

    J'ai donc un jar qui s'exécute en dehors d'éclipse en arrivant à "linker" les librairies mais sans les inclure dans mon classpath, empêchant ainsi le microcontainer de fonctionner correctement.

    Si vous avez une idée...
    Merci !

  2. #2
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par Hatman_ Voir le message
    J'ai donc tenté d'exécuter mon projet en dehors d'éclipse en utilisant l'option -cp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp lib1.jar;lib2.jar -jar mon_projet.jar
    ou l'option -classpath
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath lib1.jar;lib2.jar -jar mon_projet.jar
    cela n'a rien donné !
    Salut,

    En l'occurrence, à partir du moment ou tu utilises l'option -jar de java, l'option -cp ou -classpath est purement et simplement ignoré.
    Tous les jars dont a besoin un jar doivent être référencés dans son manifest (via la clause Class Path.

    Il faut donc ajouter le jar manquant dans celui-ci.

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    Merci pour la réponse. Il semble que je me sois mal fait comprendre.
    Je sais pertinemment que ces options ne sont pas prises en compte lors de l'exécution d'un JAR. Cela fait plusieurs jours que je cherche une solution à mon problème !

    Le jar contenant mes EJBs (appelons-le EJB.jar) est bien compris dans l'item "Class-Path" de mon manifest. Mais il n'apparait pas dans mon class-path ! Je m'explique :

    Contenu de l'item Class-path du manifest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class-Path: . C:\lib\lib1.jar C:\lib\lib2.jar C:\lib\EJB.jar C:\lib\lib3.jar
    Affichage de la variable "class-path" grâce au code présenté dans le post initial lors d'une exécution sous éclipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.class.path now = C:\lib\lib1.jar;C:\lib\lib2.jar;C:\lib\EJB.jar;C:\lib\lib3.jar
    Affichage de la variable "class-path" grâce au code présenté dans le post initial lors d'une exécution en dehors d'éclipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.class.path now = mon_projet.jar
    Le problème est donc le suivant : EJB.jar est bien "linké" à l'exécution (puisque je n'ai pas de ClassNotFoundException lors d'appel à des classes POJO "non-EJB" contenues dans ce jar) mais n'est pas contenu dans ma variable ClassPath. Or mon microcontainer ne peux déployer des EJBs que s'ils sont contenus dans un Jar du Class-Path..... En gros, je ne comprends pas pourquoi je n'arrive pas à ce que ma variable ClassPath ait la même valeur lors d'exécutions dans et en dehors d'éclipse.

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Et tu as vérifié le manifest dans le jar généré?
    Ouvre le avec un utilitaire d'archivage tel winrar et va voir le manifest généré (dans META-INF). Y'a parfois des surprises.

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Par défaut
    Oui, oui Manifest vérifié des dizaines de fois....

    De toute façon, le problème ne vient pas tellement de la présence ou non de mon "EJB.jar" dans le Manifest mais plutôt de sa présence (ou plutôt de son absence, c'est bien la le problème) dans le ClassPath.... Et comme aucune des dépendances du Manifest ne se trouve dans le ClassPath, son absence aurait causé d'autres erreurs mais n'aurais pas été à la racine de mon problème...

    J'utilise pour l'instant un "work-around" mais reste bloqué sur ce problème... Si tu as d'autres idées...

Discussions similaires

  1. Utiliser le classpath et les dependencies d'eclipse
    Par Dark_TeToN dans le forum ANT
    Réponses: 0
    Dernier message: 22/04/2011, 11h15
  2. Lancer mon programme dans une console, en dehors d'Eclipse.
    Par Pierre8r dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 10/10/2008, 20h14
  3. Comment exécuter un programme java en dehors d'eclipse
    Par padraig29 dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 06/03/2007, 17h36
  4. Réponses: 3
    Dernier message: 24/07/2006, 13h11
  5. [ClassPath]JDBC DRIVER ORACLE9i sous Eclipse
    Par Devil666 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/03/2005, 22h22

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