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 :

peut-on modifier un archive jar (compilé) sans avoir le projet original ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut peut-on modifier un archive jar (compilé) sans avoir le projet original ?
    bonsoir; dans le cadre dans mon PFE, j'ai développé une plateforme multi-agents où le développeur n'as besoin que le JAR de cette plate-forme pour construire ses applications(SMA : Système Multi-Agents). Je suis entrain de développer quelques exemples pour tester et valider cette plate-forme. Dans un exemple je construit une classe AgentVendeur qui hérite de classe AgentAtomique(qui se trouve dans le JAR). je l'ai instancie et ça marche; mais quand j'utilise des méthodes qui manipule le type AgentAtomique dans le classe de ce JAR et je fais le cast à AgentVendeur; une exception se produit. J'ai pu régler cette exception de telle sorte que la classe AgentVendeur doit se trouve dans le jar de la plate-forme. Mais je ne comprend pas pourquoi la classe AgentVendeur doit se trouver dans le JAR de la plateforme???? et C'est pourquoi je me demande si on peut modifier un archive jar (compilé) sans avoir le projet original ? parce que le développeur n'aura pas le code source de l'application; il travaillera qu'avec son JAR. ET est ce que se trouve un autre moyen pour régler ce problème sans ajouter cette classe au JAR. merci

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut
    qu'est ce que tu prêtant dire par "on peut modifier un archive jar"
    tu peut nous dire c'est quoi l'exception ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut
    bonjour; en fait la classe AgentVendeur qui hérite de la classe AgentAtomique doit être dans le jar pour que l'exemple marche (je ne comprends pas pourquoi!!!!!) donc est ce qu'il existe une méthode pour ajouter des classes .java ou\et .class dans le JAR? sans avoir besoin du code source de l'application pour créer un nouveau JAR qui contient cette classe. Car l'utilisateur de cette plateforme ne possèdera que le JAR.
    L'exception se lève quand je fais le casting de type AgentAtomique à AgentVendeur; en effet j'ai une méthode getAgent() qui retourne AgentAtomique; quand je cast la valeur à AgentVendeur une exception se lève. Ce pb se pose si la classe AgentVendeur ne se trouve pas dans le JAR. quand j'ai inséré la classe AgentVendeur dans le code source et j'ai recrée le JAR; tous marche bien. JE NE COMPRENDS PAS POURQUOI?????????.
    merci

  4. #4
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut L'exception
    j'ai re-exécuter l'exemple (je n'ai mis pas la classe AgentVendeur dans le Jar je l'ai mis dans le projet qui contient l'exemple). L'exception est java.lang.ClassCastException: AgentVendeur cannot be cast to AgentVendeur. Quelqu'un peut m'expliquer??????

  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 : 45
    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
    Citation Envoyé par aroussi_sanaa Voir le message
    j'ai re-exécuter l'exemple (je n'ai mis pas la classe AgentVendeur dans le Jar je l'ai mis dans le projet qui contient l'exemple). L'exception est java.lang.ClassCastException: AgentVendeur cannot be cast to AgentVendeur. Quelqu'un peut m'expliquer??????
    Tu as deux fois la classe AgentVendeur présente dans des classloaders différents. C'est la cause de ton erreur. Il y a la classe présente dans le classloader utlisé losque tu fait "(AgentVendeur) xxxx" et la classe retournée par la méthode que tu as appelée. Comme ces classes sont chargées par des classloader différents, elles sont différentes. Regarde déjà pourquoi cette classe est en double dans tes classloader, se sont des cas extrèmement rares et qui résultent souvent d'une application qui bidouille de travers avec ses classloaders.

  6. #6
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    normalement utiliser une classe d'une lib tierce ne pose aucun souci particulier. De nombreuses librairies Java non open source existent et permettent de manipuler les classes du jar correspondant à la librairie tierce sans souci (pour autant que les classes soient déclarées publiques).

    Je penche personnellement plutôt pour un souci de paramétrage des projets dans ton environnement.

    L'exception "java.lang.ClassCastException: AgentVendeur cannot be cast to AgentVendeur" pourrait être causée par le fait que la classe AgentVendeur existe deux fois dans ton projet où tu rencontres le problème: le nom est identique mais chacune se réfère à une version de la classe présente dans un jar différent.

    Par exemple, si ton projet inclut le code source de AgentVendeur d'une part, mais que AgentVendeur est également inclue par l'intermédiaire du JAR ajoutée au classpath de ton projet lors de son exécution: le nom est identique mais pour Java ce sont deux classes totalement séparées ; il se comporte comme si on avait deux classes ayant deux noms différents.

    EDIT: grilled par tchize

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 41
    Par défaut
    bonsoir tchiz, vous avez raison j'utilise bcq des classloades pour instancier des classes dynamiquement. En fait la classe AgentVendeur est instancié dynamiquement; l'utilisateur n'as qu'à entrer le nom et le chemin de la classe puis nous instancions un agent vendeur qu'on lui ajoute des compétences. Ces compétences sont aussi des classes qu'on va les instancier. SVP, vous pouvez l'expliquer où se trouve le problème exactement ?
    et comment peut-on régler ce problème.

    Dans notre application on a pas utilisé des classloade, mais des URLloader pour charger l'adresse de la classe. et d'aprés ce que j'ai lu sur les ClassLoader, ils existent dans la JVM pour charger une classe lorsque on demande de l'exécuter. Donc comment toujours utiliser le meme ClassLoader ?

    merci

Discussions similaires

  1. Peut-on modifier le titre de l'alert
    Par MokhTelnet dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/05/2010, 10h46
  2. Peut on modifier des fichiers Excel sans qu'il soient ouvert?
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/04/2010, 10h45
  3. Réponses: 3
    Dernier message: 17/07/2006, 17h04
  4. [jar] Comment modifier un fichier jar
    Par newfsch dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/07/2004, 14h25
  5. Réponses: 16
    Dernier message: 18/07/2003, 17h16

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