2011-05-19 31 views
5

¿Hay alguna herramienta a la que se pueda asignar una ruta de clases o carpeta, y buscará a través de todos los archivos .jar buscando referencias a una clase en particular?Herramientas para encontrar todas las dependencias en Java jar

Me habría ahorrado un día de búsqueda para resolver this kind of problem.

En mi caso, tuve que averiguar de dónde venía una referencia deshonesta a una clase, ya que impedía que JBoss comenzara correctamente debido a un NoClassDefFoundError. Supongo que estoy buscando esto:

java -jar magicbullet.jar /path/to/search com.myproject.DodgyClass 
Searching... 
com.problematic.Otherclass in /path/to/search/dodgy.jar implements com.myproject.DodgyClass 

O similar. Si no, escribiré uno.

+0

Consulte [Java class finder Tool] (http://stackoverflow.com/questions/5577543/java-class-finder-tool) – wjans

+0

Mientras más leo esto, menos entiendo. ¿Cuál es tu pregunta? ¿Desea solo encontrar en qué jar se encuentra determinada clase, o desea saber quién es el que hace referencia a una determinada clase? – Kaj

+0

En mi caso, quería encontrar la clase en la que jar hacía referencia a otra clase específica. Pasé años intentando encontrar de dónde venía un NoClassDefError, al final descubrí que una de las clases en uno de nuestros jars implementó una interfaz que no estaba en el classpath. El mensaje de error de JBoss no fue útil. Una herramienta como la que estoy buscando podría encontrar eso muy rápidamente. – Rich

Respuesta

3

Utilice Tattletale - . Le ayuda a crear un índice que es muy útil para buscar clases, etc.

+0

Parece una buena herramienta, pero no pudo ver que respondía a la pregunta "¿qué clases hacen referencia a la clase X? – Kaj

+0

Tattletale le da absolutamente la respuesta a" qué clases hacen referencia a la clase X "y" de qué clases depende X ". También proporciona dependencias entre archivos jar. Además, le informa sobre dependencias transitivas y dependencias circulares. El informe que me parece más útil es 'Class Location', que ayuda a resolver problemas de classpath si una clase se carga desde una versión de jar incorrecta. – sinha

3

Bajo Linux (o Cygwin en Windows) puede usar script desde https://gist.github.com/980697.

Uso: findclass.sh <directory> <className>

Ejemplo: findclass.sh . ClassName (medios "búsqueda de la clase llamada NombredeClase dentro de los tarros/Guerra/oídos/SARS se encuentra dentro del directorio actual y todos sus subdirectorios")

+0

Eso no dirá si una clase está haciendo referencia a otra clase o no. – Kaj

+0

Pero indicará dónde se encuentra la clase que falta. Por lo tanto, NoClassDefFoundError podría solucionarse simplemente agregando un jar adicional al classpath en tiempo de ejecución (o reemplazando el jar incorrecto con el correcto). –

0

Google de "JarAnalyzer" una herramienta útil que hace más exactamente lo que quiere (y un poco más; D)

Cuestiones relacionadas