Uno de los problemas a los que siempre nos enfrentamos los desarrolladores de software es el del desorden, y es que resulta muy simple comenzar a tener archivos desperdigados por el sistema una vez que comenzamos a probar diferentes versiones de nuestros programas (por ejemplo cuando modificamos alguna funcionalidad dentro del mismo). Y lo mismo sucede con los archivos de código fuente, que pueden albergar diferentes clases y luego se nos complica encontrar a cual puede pertenecer cada uno.
En el caso de Java, lo más habitual es necesitar encontrar a que archivo JAR pertenece una determinada clase Java para así solucionar los típicos problemas de ‘NoClassDefFoundError’ algo que por suerte no resulta demasiado complicado como vamos a ver a continuación. Pero antes de ello vamos a explicar que los JAR son básicamente archivos comprimidos, de modo tal que para poder examinarlos una alternativa es la de descomprimirlos o bien buscar una alternativa que nos permita ‘mirar’ dentro de ellos.
Para ello podemos ejecutar lo siguiente, asumiendo que vamos a revisar un archivo llamado resistor (es de una app muy simple que he creado para calcular el valor de una resistencia), pero desde luego en cada caso se reemplaza con el nombre del archivo que deseemos revisar:
$ jar tvf resistor.jar
El resultado será el que visualizamos en la imagen superior que acompaña este post, y donde tenemos visibles todos los archivos que forman un determinado JAR, entre los cuales por supuesto están los famosos .class que componen las clases de una aplicació, con lo cual finalmente sabremos cuales son los archivos que contienen las clases que buscamos.
Ahora bien, por más que tratándose de Linux siempre tenemos ante nosotros una forma de hacer las cosas desde la terminal, para muchos usuarios es más práctico hacerlas desde una aplicación gráfica, por más que ello implique instalar software adicional en su sistema. Para ellos tenemos un programa llamado jar-explorer, que nos permite explorar los archivos JAR para visualizar todo su contenido, y lo bueno es que contamos con una herramienta de búsquedas integrada, que nos ofrece búsquedas recursivas de clases de Java.
Se trata de una aplicación desarrollada, como no, en Java, por lo cual para instalarla en Ubuntu ejecutamos:
$ wget http://jar-explorer.googlecode.com/files/jarexplorer-0.7-BETA.jar
$ java -jar jarexplorer-0.7-BETA.jar
Ahora, una vez que inicia la aplicación lo que tenemos que hacer es ir hacia la opción de Archivo -> Buscar directorio raíz o archivo Jar, y seleccionar el directorio en el cual tenemos los archivos JAR. Vamos a ver una lista de todos los archivos, en la sección ‘Jar File List’, y entonces todo lo que nos resta hacer es ingresar el nombre de la clase que estamos buscando, lo cual hacemos en el campo de texto ubicado a la derecha de ‘Enter class to search’, en la parte superior de la pantalla. Por último, click en el botón de ‘Start’ para comenzar la búsqueda, que no tomará más que nos segundos.
Pero jar-explorer tiene todavía una característica más que puede sernos de gran utilidad y es la de permitirnos explorar en los contenidos de cada definición de clases en Java, algo que podemos conseguir con solo hacer click en el nombre de la clase (de entre los resultados de la búsqueda anterior).
Eso es todo, como vemos se trata de dos enfoques diferentes pero totalmente válidos para buscar clases Java entre nuestros archivos JAR, una tarea en la cual los desarrolladores caemos más de una vez y que no tiene por que ser tediosa ni complicada.