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

Langage Java Discussion :

Recherche de ressources dans le classpath


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut Recherche de ressources dans le classpath
    Pour retrouver le répertoire correspondant à un package (se trouvant éventuellement dans un jar) j'ai utilisé la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String packageName = "mon.package";
    ClassLoader cld = Thread.currentThread().getContextClassLoader();
    String path = packageName.replace('.', '/');
    URL resource = cld.getResource(path);
    Cette méthode fonctionne bien sauf qu'elle ne permet de ne trouver qu'une seule ressource.

    Par exemple : imaginons qu'un même package soit présent dans plusieurs jar (ou plusieurs éléments du classpath), le code présenté retrouve un des éléments. J'aimerai avoir la liste des ressources correspondant à ce package.
    Est ce possible (sans avoir à traiter manuellement la propriété "java.class.path") ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Attention car certains classloader pourrait ne pas voir les "packages" comme des répertoires. Je pense en particulier dans le cas de jar distant....


    Sinon la solution consiste tout simplement à utiliser getResources(), qui renvoi une Enumeration avec toutes les URLs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<URL> resources = Collections.list(cld.getResources(path));
    		for(URL resource : resources) {
    			System.out.println(resource);
    		}
    a++

  3. #3
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Merci adiGuba

    Pourquoi j'ai l'impression de poser des questions con... On va dire que c'est la fatigue.


    Qu'entend tu pas jar distant ?
    J'ai déjà traité le cas ou j'avais une URL de la forme "jar:file:/..." en récupérant l'objet JarFile en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JarURLConnection conn = (JarURLConnection) resource.openConnection();
    JarFile jarfile = conn.getJarFile();
    Et ensuite j'ai créé un proxy pour "voir" ce jar sous forme d'un objet de type File

    Si c'est ce dont tu parles, j'ai déjà traité ce cas

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Simplement qu'on limite un peut trop le classpath aux répertoires et archive jar.
    Or cela peut très bien être n'importe quoi où la notion de répertoire n'existe pas forcément tel quel.

    Je n'ai pas de cas concret à te donner, mais il est possible qu'un "package" ne soit pas trouvé par cette méthode, alors qu'on trouve bien les classes qu'il contient...


    a++

    PS : par curiosité c'est pour faire quoi ?

  5. #5
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    C'est pour faire l'équivalent du scan-package de Spring dans le cadre d'une librairie d'accès à un annuaire Ldap que je compte bientôt publier

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/03/2009, 17h00
  2. Rechercher une ressource dans Properties.Ressources
    Par Ivynox dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/09/2008, 14h33
  3. Réponses: 3
    Dernier message: 22/08/2007, 14h05
  4. Rechercher un fichier dans le classpath
    Par erwan.bodere dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 03/08/2007, 14h41
  5. [FAQ][Classpath]Charger ressource dans contexte statique ?
    Par Pill_S dans le forum Général Java
    Réponses: 3
    Dernier message: 14/10/2004, 16h52

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