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

Java Discussion :

Erreur lors de l'appel d'une méthode d'une librairie custom


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Par défaut Erreur lors de l'appel d'une méthode d'une librairie custom
    Bonjour à tous,

    Je travaille dans une entreprise, qui a déjà plusieurs projets, dont un que je doit faire évoluer.

    Je récupère donc ce projet sur SVN.
    Je voit alors qu'il a besoin de certaines librairies, dont une librairie custom.
    Je récupère donc également ce projet, que je compile, et j’inclue donc ce jar dans mon projet initial.

    Jusque là tout va bien, je compile le projet, ça fonctionne, nickel.

    Pour que ce soit plus simple a comprendre, je vais donner des numéros aux projets :
    Le projet servant de librairie sera le Projet 1
    Et l'autre le Projet 2.

    Je rajoute une méthode dans le projet 1, je compile tout va bien.
    Je modifie donc mon projet 2 pour pointer vers le nouveau jar du projet 1.
    Et là impossible de compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    error: cannot find symbol
                as = ae.test("test", "Last+second", null, null);
      symbol:   method test(String,String,String,<null>,<null>)
      location: variable ae of type ApfExtractor
    Note: Some input files use unchecked or unsafe operations.
    Note: Recompile with -Xlint:unchecked for details.
    Déjà c'est très étrange..
    Apres des heures de prise de tête, j'essaye quelque chose de plus simple, j'ai supprimer ma nouvelle méthode, et j'ai renommer une méthode existante, qui était appelée dans mon Projet2.
    Je modifie le nom également dans mon Projet2 lors de l'appel.
    Je met a jour les jar tout ça.
    J'ai bien l’auto complétion de la méthode et tout, mais non, toujours le même problème.

    J'ai l’impression que le projet2 garde une définition du projet1 mais je comprend pas comment, et où.

    Merci d'avance pour votre aide.

    Cordialement,
    Alex

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Tu travailles avec quel environnement? Quel IDE par exemple?

    Tu as deux projets qui travaillent manifestement ensemble : vous avez pensé à mettre en place un système de gestion du cycle de vie du projet qui gère automatiquement ces problématiques? (Maven est ton ami)


    Est-ce que la libraire "custom" est le projet que tu appelles Projet1? Si oui, ça veut dire que dans tes classes, tu auras potentiellement deux jars différents avec les mêmes classes à l'intérieur (même nom, même package). Dans ce cas là, le classloader n'en prend qu'une seule (et c'est lui qui décide, il prend ce qu'il veut... Ca dépend du classloader utilisé)

  3. #3
    Membre très actif Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse.

    Je suis sur NetBeans 8 (8.0.2)
    C'est du Java 7

    Il n'y a pas de maven ou quoi que ce soit du genre. Il faudrait surement y songer.

    C'est bien le projet1 qui sert de librairie pour le projet2, mais je t'avoue que je t'ai perdu après :
    Si oui, ça veut dire que dans tes classes, tu auras potentiellement deux jars différents avec les mêmes classes à l'intérieur (même nom, même package). Dans ce cas là, le classloader n'en prend qu'une seule (et c'est lui qui décide, il prend ce qu'il veut... Ca dépend du classloader utilisé)
    Mais c'est sur que mon problème viens d'un truc dans le genre. Juste que j'arrive pas a trouver où agir.

    Quand j'ouvre le .jar j'ai bien mes classes.
    Si j'affiche le contenu de la librairie via netbeans je vois bien mes classes, avec la méthode en question.

    Merci encore pour ton aide,

    Cdlt,
    Alex

  4. #4
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Je modifie donc mon projet 2 pour pointer vers le nouveau jar du projet 1.
    Tu as fait quoi pour faire ça? Un lien entre les projets dans NetBeans?
    Je ne suis pas un expert NetBeans, mais sous Eclipse, tu as un système de dépendances entre les projets Eclipse. Le fonctionnement est de simuler l'interdépendances entre les projets tout en pouvant les faire évoluer en parallèle sans être obligé de devoir refaire un jar à chaque fois.

    Par contre, si tu as déjà le jar de l'ancien projet1, tu vas te retrouver au final avec
    - tes classes de projet2
    - tes classes de projet1 modifié
    - le jar de projet1 qui contient toutes les classes avec les mêmes packages

    Le classloader ne peut charger qu'une seule classe de même package/nom en tout, sinon il y a un conflit. Si tu as deux jar avec dans chacun la classe fr.my.package.MaClasse, une seule sera effectivement chargée par le classloader (ce qui peut amener à de gros problèmes si c'est un conflit de nom qui n'est pas volontaire)


    Si tes projets sont liés, essaye de supprimer le fichier .jar du classpath

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    .Faudrait que tu nous dise comment tu compile ton projet principal, car visiblement il utilise autre chose que le jar que t'as généré de ta lib modifiée.

  6. #6
    Membre très actif Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Par défaut
    Bonjour à tous,

    Merci encore pour vos réponses.

    Tu as fait quoi pour faire ça? Un lien entre les projets dans NetBeans?
    .Faudrait que tu nous dise comment tu compile ton projet principal, car visiblement il utilise autre chose que le jar que t'as généré de ta lib modifiée.
    J'ai créer une dépendance entre les deux projets, j'avais le problème.
    J'ai donc essayé en faisant clean and build, puis en ajoutant une librairie au projet2 (la librairie est donc le .jar généré par le clean and build).

    Je suis sur et certain de pointer vers le bon .jar, j'en ai bien qu'un seul, le problème n'est pas là.

    Si tes projets sont liés, essaye de supprimer le fichier .jar du classpath
    J'ai pas compris ce que tu veux dire là.
    J'ai bien le chemin vers le jar dans mon project.properties mais si je l’enlève il trouve plus rien.

    Merci encore pour vos réponse

Discussions similaires

  1. [JNA] Erreur lors de l'appel de fonction venant d'une librairie
    Par lac981 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 31/05/2011, 11h02
  2. Appeler une méthode d'une applet dans une jsp
    Par salmoucha10 dans le forum Applets
    Réponses: 1
    Dernier message: 11/01/2011, 19h25
  3. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  4. Réponses: 2
    Dernier message: 18/01/2008, 11h59
  5. Réponses: 2
    Dernier message: 31/08/2005, 16h12

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