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 :

Mettre a jour le classpath pour Class.forName dynamiquement


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut Mettre a jour le classpath pour Class.forName dynamiquement
    Bonjour,
    J'ai un probleme pour mettre a jour DYNAMIQUEMENT le classpath voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    public static List<Class> getClassListFromJar(String jar)
    			throws IOException {
     
    		List<Class> classes = new ArrayList<Class>();
     
    		JarFile jfile = null;
     
    // ICI tentative de mise a jour du classpath
    // je suis un peu dessus parceque ca ne marche et normalement la logique est bonne
    		String classPath = System.getProperty("java.class.path");
     
    		System.setProperty("java.class.path", classPath
    				+ ":/mon/nouveau/path");
     
    		System.out.println(classPath);
    		System.out.println(System.getProperty("java.class.path"));
     
    		try {
    			jfile = new JarFile(jar);
    			for (Enumeration<JarEntry> entries = jfile.entries(); entries
    					.hasMoreElements();) {
    				JarEntry element = entries.nextElement();
    				String nomFichier = element.getName();
     
    				// classes.add(Class.forName(nomFichier.split("\\.")[0]));
     
    				if (nomFichier.endsWith(".class")) {
     
    					nomFichier = nomFichier.split("\\.")[0]
    							.replaceAll("/", ".");
    					System.out.println(nomFichier);
    					classes.add(Class.forName(nomFichier));
    					/*
    					 * IPlugin obj = (IPlugin) Class.forName(nomFichier)
    					 * .newInstance(); System.out.println(obj.getName());
    					 */
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			if (jfile != null)
    				jfile.close();
    		}
    		return classes;
    	}
    Alors vous avez une idee ?

    merci

  2. #2
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Si tu veux avoir un "classpath dynamique", la méthode que tu utilises n'est pas la bonne. Il faut voir du coté des classLoaders, tel que URLClassLoader.
    Je te laisse chercher comment faire et si tu as un soucis dit le nous

    A+
    Hydraland

  3. #3
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Oui en ce moment je suis entrain de charger mes jar et je gere mes instances avec URLClassLoader.

    Mon souci n'est pas de charger un jar en memoire il y a mille façon pour le faire mais pour supprimer ou ajouter un path au classpath dynamiquement en cours d'execution c'est ce la qui m'interesse.

    J'ai regardé du cote du classloader mais je ne pense pas qu'il puise changer le classpath...

    donc voila je te remercie pour le reply

  4. #4
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    Je rajoute que l'exemple ci dessus fonctionne tres bien si je rajoute le jar charger aux classpath de mon project donc j'aimerais bien jouter le path du jar dans mon classpath.

    j'espere que je suis clair parceque je pense que je l'etais pas avant.


    cordialement

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Il n'est pas possible de changer le classpath dynamiquement. La JVM le lit une fois pour toute au démarrage.
    Tu as deux possibilités :
    1) tu connais les noms de tes jars, donc tu les ajoutes au classpath lors du démarrage de la JVM.
    2) tu ne peux pas appliquer 1) donc il te faut ton propre classloader.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé Avatar de AliJava
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 184
    Par défaut
    C'est ce qu'il me semble juste parceque j'ai beau chercher sur le net mais bon...

    et là encore je me pose la question à quoi sert alors de faire une méthode setProperty ???

    mais bon si on peut pas on peut pas donc voila ça marche bien avec la classloader et desormais je sais qu'on peut changer de classpath.

    merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre a jour des controls depuis classe c#
    Par mehdima dans le forum ASP.NET
    Réponses: 1
    Dernier message: 15/04/2013, 09h31
  2. Réponses: 5
    Dernier message: 23/04/2008, 12h07
  3. Réponses: 2
    Dernier message: 05/03/2008, 19h30
  4. Réponses: 9
    Dernier message: 19/09/2006, 22h54
  5. [Débutant][Conception] Mettre à jour un objet de type classe
    Par Sylvester dans le forum Général Java
    Réponses: 19
    Dernier message: 09/02/2006, 17h59

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