Re: How do I search for a constant in a class in a bunch of Jars?
In article
<84e97aef-c909-4016-870b-cd02dbb36e09@j9g2000prh.googlegroups.com>,
laredotornado <laredotornado@zipmail.com> wrote:
I'm using Mac OS X (bash shell) with Java 1.5. I have an enum class
and I think an old version is drifting around in a JAR file somewhere
that contains a field, "MATCH_999". Does anyone know how to search
through the JAR files to find the JAR(s) that may contain this? I
would prefer not to unzip each one.
Using the -verbose option of the `java` command may shed light.
Alternatively, the example below may be modified to search particular
paths. As written, it examines the java.class.path property, but an
errant $CLASSPATH environment variable is another suspect. Searching the
individual JarEntry's InputStream should be a straightforward extension.
<code>
package cli;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/** @author Ram, Matthews */
public class ShowClassPath {
public static void main(final String[] args) throws Throwable {
final String pathSep = File.pathSeparator;
final String list = System.getProperty("java.class.path");
for (final String path : list.split(pathSep)) {
final File f = new java.io.File(path);
if (f.isDirectory()) {
ls(f);
} else if (f.toString().endsWith("jar")) {
lsJar(f);
} else {
System.out.println(f);
}
}
}
private static void ls(File f) {
File[] list = f.listFiles();
for (File file : list) {
if (file.isDirectory()) {
ls(file);
} else {
System.out.println(file);
}
}
}
private static void lsJar(File f) {
try {
JarFile jar = new JarFile(f);
Enumeration e = jar.entries();
while (e.hasMoreElements()) {
JarEntry je = (JarEntry) e.nextElement();
System.out.println(je.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
</code>
--
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>