Fichier jar

tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,
Je vodrais que mon programme java puisse afficher tous les méthodes d'une classe contenu dans un fichier jar dont on connait , en lui indiquant le chemin vers le jar et le nom de la classe. . Merci d'avance à tous,
A voir également:

2 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Il te faut un petit class loader pour récupérer la classe dans le fichier JAR, et ensuite tu fais un peu de reflect pour récupérer les méthodes de la classe et c'est fini... Finger on the nose !
2
tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour votre réponse, j'ai déjà récupérer les classes de mon fichier jar et voila mon code.
URLClassLoader ucl;
try {
ucl = new URLClassLoader(new URL[] { file.toURL() });
final Class driverClazz = ucl.loadClass(className.replace(".class",""));
System.err.println(driverClazz);
} catch (final Exception e) {
e.printStackTrace();
}
}

mais je trouve une difficulté pour récupérer les méthodes du classes, en effet j'ai essayé avec ce codes mais j'arrive pas à la solution.
public static void getMethodNames(List<String> list){
try{
for(int i=0;i<list.size();i++){
Class<?> c=Class.forName(list.get(i));
Method[] m=c.getMethods();

System.out.println(m);
}
}
catch( final Exception e){
e.printStackTrace ();
}
}
alors j'espère que vous m'expliquer comment faire le reflect .
et merci d'avance.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Ce n'est pas l'affichage du tableau m que tu dois faire, mais l'affichage de son contenu !

for (int j=0; j<m.length; j++)
    System.out.println(m[j]);
0
tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Je veux lire un fichier .jar depuis mon ordinateur trouver une classe spécifique dedans(on connait son nom) MaClasse puis récupérer ses méthodes(ici le problème!!)
pour mieux me comprendre je vous donne le code:
public class Test {

public static void main(final String[] args) {
final String filePath = "MonRep.fichier.jar";
final List<String> list = getClasseNamesInPackage
(filePath, "");
final String className= list.get(0);
final File file = new File(filePath);

URLClassLoader ucl;
try {
ucl = new URLClassLoader(new URL[] { file.toURL() });// pour recuperer le fichier.jar

} catch (final Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static List<String> getClasseNamesInPackage
(final String jarName, String packageName){
final ArrayList<String> classes = new ArrayList<String> ();

packageName = packageName.replaceAll("\\." , "/");//ici pour lire correctement le format

try{
final JarInputStream jarFile = new JarInputStream
(new FileInputStream (jarName));
JarEntry jarEntry;

while(true) {
jarEntry=jarFile.getNextJarEntry ();
if(jarEntry == null){
break;
}
if((jarEntry.getName ().startsWith (packageName)) &&
(jarEntry.getName ().endsWith ("MaClasse.class")) ) {//MaClasse est la classe que je veux récupérer ses méthodes

classes.add (jarEntry.getName().replaceAll("/", "\\."));
//System.out.println("ici"+jarEntry.getName().replaceAll("/", "\\."));//le bon format d'une classe
String c=jarEntry.getName().replaceAll("/", "\\.");
Class<?> Clz=Class.forName(c);// mon but ici de trouver le classe Clz pour son nom c mais il y a une exception ici!!! quel est le probléme

System.out.println("je suis la class"+D);
Method[] meth=Clz.getMethods();//ici je veux lire et extraire les méthodes dans la classe Clz
System.out.println("ici la prmiére méthode de le classe"+D+meth[0]);// pour vérifier une méthode

}
}
}
catch( final Exception e){
e.printStackTrace ();
}
return classes;
}
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Tu t'embêtes quand même beaucoup pour pas grand chose !!!
Voici un exemple complet :

import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class Test
{
    public static void main(String...args) throws Exception
    {
        ClassLoader jar = new URLClassLoader(new URL[]{ new File("/home/KX/gs-core-1.1.1.jar").toURI().toURL() });
        Class<?> classe = jar.loadClass("org.graphstream.graph.Graph");
        
        for (Method m : classe.getMethods())
            System.out.println(m);
    }
}
0
tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Merci bcp j'ai déjà résolu ce problème hier avec un code plus long mais presque pareil il me reste juste de récupérer les classe annotés avec une annotation "Annotation" avec getMethods le code récupère toutes les méthodes,je veux juste récupérer des méthodes cibles annotés avec cette annotation mais le problème est que la commande if(meth[i].isAnnotationPresent... n'est pas juste. alors je vous demande comment exactement vérifier la présence d'une annotation dans une méthode avant de l'afficher.
0
irongege Messages postés 43559 Date d'inscription   Statut Modérateur Dernière intervention   5 082
 
Lut

Et que tu veux que l'on te réponde ?
-1
tattou11 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
quelqu'un peut m'aider svp??
0