Every so often I need to figure out which jar(s) contain a certain class so I can figure out why an application acts the way it does – either since a class is missing in some environment or since the wrong class was loaded into the classpath.
When that happens, I use the following script. I saw it once in a company I worked at, and then again in another company.
I modified it slightly, but the credits do not go to me, they go to the anonymous person who wrote the initial code.
The script is available for download on GitHub.
Or you can simply copy it from here:
#!/bin/tcsh -f if ( $#argv < 2 ) then printf "Scans all the JARs in the specified directory for classes matching the specified string\n" printf "Usage: $0 <dir> <class-name-pattern>\n" printf "Example: $0 . Exception\n" printf 'Example: '$0' $JAVA_HOME/lib "com\/sun\/.*action"\n' exit 1 endif set DIR = "$1" set CLASS = "$2" foreach J ( `find $DIR -name "*.jar"` ) printf "." set res=`jar tvf $J | grep "$CLASS" | sed 's/$/;/'` set outputsize = `echo $res|wc -c` if ( $outputsize > 1 ) then printf "\nMatch found in [$J]\n" printf "$res\n" | tr ';' '\n' endif end printf "\n"