Avec Linux, j'utilise un petit script pour m'aider à trouver dans quel jar se trouve une classe qui peut être utilisée dans une find -exec
:
findclass.sh
:
unzip -l "$1" 2>/dev/null | grep $2 >/dev/null 2>&1 && echo "$1"
En gros, comme les bocaux sont des zip, unzip -l
imprimera la liste des ressources de la classe, vous devrez donc convertir l'option .
a /
. Vous pourriez effectuer le remplacement dans le script avec un tr
mais ce n'est pas trop difficile de le faire soi-même en appelant le script.
L'idée est d'utiliser find
à la racine de votre classpath pour localiser tous les jars, puis exécute findclass.sh
sur tous les bocaux trouvés pour rechercher une correspondance.
Il ne gère pas les multi-répertoires, mais si vous choisissez soigneusement la racine, vous pouvez le faire fonctionner.
Maintenant, trouvez quel jar contient la classe org.apache.commons.lang3.RandomUtils
pour que vous démavenisiez votre projet (...) :
$ find ~/.m2/repository/ -type f -name '*.jar' -exec findclass.sh {} org/apache/commons/lang3/RandomUtils \;
.m2/repository/org/apache/commons/commons-lang3/3.7/commons-lang3-3.7.jar
.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar
.m2/repository/org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-sources.jar
$