295 votes

Trouver une classe quelque part dans des dizaines de fichiers JAR?

Ce n’est pas exactement une question sur la programmation, mais il est indirectement lié à des erreurs CLASSPATH.

Je ne suis pas sûr des dépendances pour ce projet. Ce qui est un bon outil pour rechercher un nom de classe spécifique à l’intérieur de plusieurs fichiers de pots ?

Merci.

496voto

Dave Jarvis Points 12598

Utiliser l' jar (ou unzip -v), grep, et find des commandes.

Par exemple, la liste de tous les fichiers de classe qui correspond au nom de:

for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName; done

Si vous connaissez l'ensemble de la liste des archives Java vous voulez la recherche, vous pouvez aussi les placer dans le même répertoire à l'aide de (symbolique) des liens.

Ou utiliser find (cas avec tact) pour trouver le fichier JAR qui contient un nom de classe:

find path/to/libs -name '*.jar' -exec grep -Hls ClassName {} \;

Par exemple, pour trouver le nom de l'archive contenant IdentityHashingStrategy:

$ find . -name "*.jar" -exec grep -Hsli IdentityHashingStrategy {} \;
./trove-3.0.3.jar

Si le POT pourrait être n'importe où dans le système et l' locate commande est disponible:

for i in $(locate "*.jar");
  do echo $i; jar -tvf $i | grep -Hsi ClassName;
done

Ou essayez ce moteur de recherche:

Ou créer un graphique à l'aide de mon logiciel:

69voto

Andreas_D Points 64111

Eclipse peut le faire, juste créer un projet (temporaire) et chaussez vos bibliothèques le classpath de projets. Ensuite, vous pouvez facilement trouver les classes.

Un autre outil, qui vient à mon esprit, est Java Decompiler. Il peut ouvrir beaucoup de pots à la fois et permet de trouver des classes aussi bien.

66voto

ipolevoy Points 1250

quelque temps auparavant, j’ai écrit un programme juste pour ça : http://code.google.com/p/jar-explorer/

34voto

user311174 Points 757
<pre><code></code><p>vous donne le nom de la Jarre</p><pre><code></code></pre><p>vous donne l’ensemble de la classe</p></pre>

13voto

Lefrog Points 101
#!/bin/bash

pattern=$1
shift

for jar in $(find $* -type f -name "*.jar")
do
  match=`jar -tvf $jar | grep $pattern`
  if [ ! -z "$match" ]
  then
    echo "Found in: $jar"
    echo "$match"
  fi
done

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X