Comment trouveriez-vous un nom de classe particulier dans de nombreux fichiers jar?
(Vous recherchez le nom de classe réel, pas les classes qui le référencent.)
Comment trouveriez-vous un nom de classe particulier dans de nombreux fichiers jar?
(Vous recherchez le nom de classe réel, pas les classes qui le référencent.)
Réponses:
Eclipse peut le faire, il suffit de créer un projet (temporaire) et de placer vos bibliothèques sur le chemin de classe des projets. Ensuite, vous pouvez facilement trouver les classes.
Un autre outil qui me vient à l'esprit est Java Decompiler. Il peut ouvrir de nombreux bocaux à la fois et permet également de trouver des cours.
la source
Unix
Sous Linux, d'autres variantes Unix, Git Bash sous Windows ou Cygwin, utilisent les commandes
jar
(ouunzip -v
)grep
, etfind
.La liste suivante répertorie tous les fichiers de classe correspondant à un nom donné:
Si vous connaissez la liste complète des archives Java que vous souhaitez rechercher, vous pouvez les placer toutes dans le même répertoire à l'aide de liens (symboliques).
Ou utilisez
find
(en respectant la casse) pour trouver le fichier JAR qui contient un nom de classe donné:Par exemple, pour trouver le nom de l'archive contenant
IdentityHashingStrategy
:Si le fichier JAR peut se trouver n'importe où dans le système et que la
locate
commande est disponible:Une variation de syntaxe:
les fenêtres
Ouvrez une invite de commande , accédez au répertoire (ou répertoire ancêtre) contenant les fichiers JAR, puis:
Voici comment ça fonctionne:
for /R %G in (*.jar) do
- boucle sur tous les fichiers JAR, parcourant récursivement les répertoires; stocker le nom de fichier dans%G
.@jar -tvf "%G" |
- exécutez la commande Java Archive pour répertorier tous les noms de fichiers dans l'archive donnée et écrivez les résultats sur la sortie standard; le@
symbole supprime l'impression de l'appel de la commande.find "ClassName" > NUL
- rechercher une entrée standard, issue de la sortie de la commande jar, pour le nom de classe donné; ce sera misERRORLEVEL
à 1 si il y a une correspondance (sinon 0).&& echo %G
- iffERRORLEVEL
est différent de zéro, écrivez le nom du fichier d'archive Java sur la sortie standard (la console).la toile
Utilisez un moteur de recherche qui analyse les fichiers JAR .
la source
il y a quelque temps, j'ai écrit un programme juste pour ça: https://github.com/javalite/jar-explorer
la source
vous donne le nom du pot
vous donne le package de la classe
la source
la source
jar -tvf
parunzip -l
.Pour localiser les pots correspondant à une chaîne donnée:
find . -name \*.jar -exec grep -l YOUR_CLASSNAME {} \;
la source
Je ne connaissais pas d'utilitaire pour le faire lorsque j'ai rencontré ce problème, j'ai donc écrit ce qui suit:
la source
Il existe également deux utilitaires différents appelés les deux "JarScan" qui font exactement ce que vous demandez: JarScan (inetfeedback.com) et JarScan (java.net)
la source
Le script de user1207523 fonctionne bien pour moi. Voici une variante qui recherche les fichiers jar de manière récursive en utilisant find au lieu d'une simple expansion;
la source
J'ai toujours utilisé cela sur Windows et cela a exceptionnellement bien fonctionné.
findstr.exe est livré en standard avec Windows et les paramètres:
J'espère que cela aide quelqu'un.
la source
Une
bash script
solution utilisantunzip (zipinfo)
. Testé surUbuntu 12
.la source
Pour rechercher tous les fichiers jar dans un répertoire donné pour une classe particulière, vous pouvez faire ceci:
ou, encore plus simple,
La sortie ressemble à ceci:
C'est très rapide car l'option -F signifie rechercher une chaîne fixe, donc elle ne charge pas le moteur d'expression régulière pour chaque appel grep. Si vous en avez besoin, vous pouvez toujours omettre l'option -F et utiliser des expressions régulières.
la source
J'ai trouvé cette nouvelle façon
Donc, cela répertorie le pot et la classe s'il est trouvé, si vous le souhaitez, vous pouvez donner ls -1 * .jar ou saisir xargs avec la commande find HTH Someone.
la source
ClassFinder est un programme conçu pour résoudre ce problème. Il vous permet de rechercher récursivement dans les répertoires et les fichiers JAR pour trouver toutes les instances d'une classe correspondant à un modèle. Il est écrit en Java, pas en python. Il a une belle interface graphique qui le rend facile à utiliser. Et ça tourne vite. Cette version est précompilée dans un pot exécutable afin que vous n'ayez pas à la construire à partir des sources.
Téléchargez-le ici: ClassFinder 1.0
la source
Vérifiez JBoss Tattletale ; même si je ne l'ai jamais utilisé personnellement, cela semble être l'outil dont vous avez besoin.
la source
Utilisez simplement FindClassInJars, c'est un programme swing simple, mais utile. Vous pouvez vérifier le code source ou télécharger le fichier jar sur http://code.google.com/p/find-class-in-jars/
la source
Je ne sais pas pourquoi les scripts ici n'ont jamais vraiment fonctionné pour moi. Cela marche:
la source
Script pour rechercher le fichier jar: find_jar.sh
Utilisation: ./find_jar.sh <répertoire de niveau supérieur contenant les fichiers jar> <nom de classe à rechercher>
Ceci est similaire à la plupart des réponses données ici. Mais il ne produit que le nom du fichier, si grep trouve quelque chose. Si vous souhaitez supprimer la sortie de grep, vous pouvez le rediriger vers / dev / null, mais je préfère également voir la sortie de grep afin de pouvoir utiliser des noms de classe partiels et trouver celui correct à partir d'une liste de sortie affichée.
Le nom de la classe peut être à la fois un nom de classe simple comme "String" ou un nom complet comme "java.lang.String"
la source
Pour ajouter encore un autre outil ... c'est un outil très simple et utile pour Windows. Un simple fichier exe sur lequel vous cliquez, donnez-lui un répertoire de recherche, un nom de classe et il trouvera le fichier jar qui contient cette classe. Oui, c'est récursif.
http://sourceforge.net/projects/jarfinder/
la source
Pour rechercher une classe dans un dossier (et des sous-dossiers) de fichiers JAR: https://jarscan.com/
Exemple:
la source
Vous pouvez trouver une classe dans un répertoire plein de pots avec un peu de shell:
Vous cherchez la classe "FooBar":
la source
Une chose à ajouter à tout ce qui précède: si vous n'avez pas l'exécutable jar disponible (il est livré avec le JDK mais pas avec le JRE), vous pouvez utiliser unzip (ou WinZip, ou autre) pour accomplir la même chose.
la source
auto promotion sans vergogne, mais vous pouvez essayer un utilitaire que j'ai écrit: http://sourceforge.net/projects/zfind
Il prend en charge les fichiers d'archive / compressés les plus courants (jar, zip, tar, tar.gz, etc.) et contrairement à de nombreux autres trouveurs de jar / zip, prend en charge les fichiers zip imbriqués (zip dans zip, jar dans jar, etc.) jusqu'à une profondeur illimitée.
la source
Un peu tard pour la fête, mais néanmoins ...
J'ai utilisé JarBrowser pour trouver dans quel pot une classe particulière est présente. Il possède une interface graphique facile à utiliser qui vous permet de parcourir le contenu de tous les pots du chemin sélectionné.
la source
Le script suivant vous aidera
la source
Celui-ci fonctionne bien dans MinGW (environnement Windows Bash) ~ gitbash
Mettez cette fonction dans votre fichier .bashrc dans votre répertoire HOME:
la source
Grepj est un utilitaire de ligne de commande pour rechercher des classes dans des fichiers jar. Je suis l'auteur de l'utilitaire.
Vous pouvez exécuter l'utilitaire comme
grepj package.Class my1.jar my2.war my3.ear
Plusieurs fichiers de bocal, d'oreille et de guerre peuvent être fournis. Pour une utilisation avancée, utilisez find pour fournir une liste des pots à rechercher.
la source
Vérifiez ce plugin pour éclipse qui peut faire le travail que vous recherchez.
https://marketplace.eclipse.org/content/jarchiveexplorer
la source
Dans un environnement Linux, vous pouvez effectuer les opérations suivantes:
Où nom est le nom du fichier de classe que vous recherchez à l'intérieur des fichiers JAR répartis dans la hiérarchie des répertoires enracinés dans rép_base .
la source
Vous pouvez utiliser
locate
etgrep
:Assurez-vous de courir
updatedb
avant de l'utiliserlocate
.la source