comment trouver le fichier jar contenant une définition de classe?
Quelle est votre outil préféré, plugin, script, trouver une classe java dans un tas de fichiers jar?
Très souvent, j'hérite de code qui se plaint d'une classe qui n'existe pas, et c'est tout simplement parce que le fichier jar n'est pas inclus dans le classpath. Mais, dans ce fichier jar(s) est la classe? Je ne peut pas avoir le POT (j'ai donc à la recherche en ligne), ou l'ajout d'un JAR au classpath pourrait créer un doublon de la classe de définition du problème.
Évidemment je préfère un plugin eclipse, mais je suis ouvert à n'importe quel morceau de logiciel qui fonctionne avec Windows.
Je sais... Windows n'est pas mon choix, mais c'est ce que j'ai eu à travailler avec.
Merci!
Luis
P. S. Merci pour vos réponses. Après l'examen de certaines réponses, j'ai pris conscience que je devrais avoir une meilleure explication de mon scénario. Nous avions une bibliothèque de téléchargé ou créé des fichiers JAR, mais parfois, la classe est en ligne quelque part.
- grande question. Je croise tout le temps. je ne sais pas pourquoi il a été fermé comme hors-sujet. bizarre
- C'est stackoverflow pour vous.
Vous devez vous connecter pour publier un commentaire.
(Ce qui est une amélioration du script que j'avais dans les versions précédentes de la réponse car il produit beaucoup de nettoyeur de sortie au prix de certaines
awk
spécial/laid citant.)J'ai construit un script (
findinjars
) qui ne fait que cela.vous pouvez ensuite appeler avec:
ou tout simplement
Dot caractères dans le nom de classe entièrement qualifié sera interprété dans la regexp sens de "n'importe quel caractère", mais ce n'est pas un gros problème puisque c'est une heuristique de l'utilité (c'est pourquoi il est sensible à la casse trop d'ailleurs). Habituellement, je ne vous embêtez pas avec le nom de classe complet et il suffit de taper une partie.
Dans le même sens que BalusC de réponse (je ne peux pas poster de commentaire encore, ni lien 2 url, pas de réputation 🙁 ), vous pouvez trouver un pot grâce à ces 2 pot finder moteurs:
- http://www.jarfinder.com/
- findjar
J'ai rencontré le même problème, un nombre incalculable de fois, j'ai donc écrit un petit outil pour les trouver.
Une simple ligne de commande:
findclass MyClass -classpath ...
Il cherche les répertoires, jar, zip, de la guerre et de l'oreille fichiers pour votre classe.
J'ai écrit il y a quelques années et de l'utiliser tout le temps.
J'ai pensé que d'autres peuvent le trouver utile donc j'ai téléchargé sur github.
Il est librement disponible pour le téléchargement:
https://github.com/eurozulu/Findclass/tree/master/dist
Si vous voulez un look à la source, c'est dans le même site:
https://github.com/eurozulu/Findclass/tree/master
Si vous l'aimez, dites le moi pour me donner chaud confortable sentiment 🙂
Une simple commande. Vous n'avez pas à utiliser "tout le faire", utiliser "&& " pour imprimer nom de fichier si 'grep' trouve la classe.
J'ai généralement recours à bash pour que:
grep -lr "ClassName" .
Le truc, c'est que les noms ne sont pas encodés en quelque sorte. Vous pouvez ouvrir fichier jar dans l'éditeur de texte et vous les verrez. (Vous pouvez même inclure nom du package dans la requête de recherche.)Je soupçonne qu'il y a des équivalent windows aussi.
- Je utiliser jarscan. C'est un fichier jar exécutable qui peut: recherche récursive de l'ensemble d'une structure de dossiers pour les bocaux qui contiennent la classe que vous cherchez. Il recherche par nom de classe, nom du package ou regex.
Grepj est un utilitaire de ligne de commande pour la recherche de classes dans des fichiers jar.
Vous pouvez exécuter l'utilitaire comme
grepj package.Class my1.jar my2.war my3.ear
Portée de la recherche est
Plusieurs jar, ear, war fichiers peuvent être fournis.
J'ai écrit un programme pour cette: https://github.com/javalite/jar-explorer Il sera également décompiler existant octets de code pour vous montrer les interfaces, les méthodes, les super-classes, permettra d'afficher le contenu d'autres ressources (texte, images, html, etc.
Si ce n'est pas dans le classpath, alors vous avez probablement n'avez pas le fichier JAR elle-même à tous. La recherche via Eclipse est builtin
Ctrl+Shift+T
fonction n'aidera pas beaucoup. Habituellement, vous pouvez utiliser le nom du paquet à "deviner" où vous pourriez obtenir le fichier JAR à partir de sur l'internet. E. g. unorg.apache.commons.lang.XXX
classe est disponible à http://commons.apache.org/lang.Pour les non évidente, je me utiliser http://grepcode.com, le POT code source du moteur de recherche.
utiliser ceci:
pour x in $(find . -name '*.jar')
faire
unzip-l $x | grep WCCResponseImpl
fait
Le meilleur et le plus simple est d'utiliser le JAD Decompiler. Et oui, c'est un PLUGIN ECLIPSE !
Télécharger et enregistrer le plugin dans n'importe quel emplacement sur votre ordinateur.
Le plugin contient les fichiers suivants:
Effectuez les étapes suivantes:
Maintenant, sélectionnez toutes les classe et appuyez sur F3.
L' .fichier de classe automatiquement décompiler et afficher le contenu !
Vous pouvez toujours ajouter de la bibliothèque de Référence de votre projet dans Eclipse, puis dans le Paquet Navigateur, il suffit de développer les paquets dans le fichier JAR jusqu'à ce que vous trouver la classe que vous cherchez.
@Nikita Rybak: AstroGrep pour Windows est notre ami: http://astrogrep.sourceforge.net/
J'ai essayé certaines de ces commandes Unix, mais ils erronées pour diverses raisons. Voici un script Perl que j'ai écrit. Il est spécifiquement conçu pour fonctionner sur en utilisant Cygwin Cygwin version de Perl.
J'ai récemment créé un outil de recherche de classe , des paquets et des bibliothèques. Vous pouvez l'essayer http://javasearch.buggybread.com/. Cliquez sur le cadre et il va vous aider à trouver les informations de dépendance ( pot , pom).
Voulais juste mentionner ici que les tiers peuvent être recherchées pour certains de nom de fichier spécifique dans jarfinder
Bien qu'il n'a pas directement répondu à la question, mais il ne fera pas de mal 🙂
Espère que cette aide