java class dependencies packages

Detección del ciclo del paquete Java: ¿cómo puedo encontrar las clases específicas involucradas?



class dependencies (9)

¿Qué herramienta recomendaría para detectar las dependencias cíclicas del paquete Java , sabiendo que el objetivo es listar explícitamente las clases específicas involucradas en el ciclo ''paquetes cruzados'' detectado ?

Sé sobre classycle y JDepend , pero ambos no JDepend las clases involucradas en una dependencia de paquete cíclico. Metrics tiene una representación gráfica interesante de los ciclos, pero de nuevo se limita a los paquetes y es bastante difícil de leer en algún momento.

Me estoy cansando de obtener un:

"tienes una dependencia de ciclo de paquete entre esos 3 paquetes
tienes xxx clases en cada
buena suerte encontrar las clases correctas y romper este ciclo "

¿Conoces alguna herramienta que dé el paso adicional para explicarte por qué se detecta el ciclo (es decir, "enumerar las clases involucradas")?

Riiight ... Es hora de proclamar los resultados:

@ l7010.de: Gracias por el esfuerzo. Te votaré (cuando tenga suficiente representante), especialmente para la respuesta ''CAP'' ... pero CAP está muerto en el agua y ya no es compatible con mi Eclipse 3.4. El resto es comercial y solo busco freeware.

@ daniel6651: Gracias pero, como dije, solo freeware (disculpa por no haberlo mencionado en primer lugar).

@izb como usuario frecuente de findbugs (utilizando el último 1.3.5 en este momento), estoy a un clic de distancia para aceptar tu respuesta ... si pudieras explicarme qué opción hay para activar findbug para detectar cualquier ciclo. Esa característica solo se menciona para la versión 0.8.7 de pasada (busque " Detector de nuevo estilo para encontrar dependencias circulares entre clases "), y no puedo probarla. Actualización: funciona ahora, y tenía un viejo archivo de configuración de findbugs en el que esa opción no estaba activada. Aun así me gusta el CAD ;)

LA RESPUESTA es ... ver CAD


Bueno ... después de probar DepFinder presentado anteriormente , resulta genial para una detección rápida de dependencias simples, pero no escala bien con el número de clases ...

Así que la RESPUESTA REAL REAL es: CDA - Class Dependency Analyzer

Es rápido, actualizado, fácil de usar y proporciona una representación gráfica de las clases y sus dependencias circulares. Un sueño hecho realidad ;)

Debe crear un plan de trabajo en el que solo ingrese el directorio de sus clases (.class) (no es necesario tener un classpath completo)
La opción "Detectar dependencias circulares - ALT - C " funciona como publicitar y no toma el 100% de la CPU durante horas para analizar mis 468 clases.
Nota: para actualizar un espacio de trabajo, necesita abrirlo nuevamente (!), Para activar un nuevo escaneo de sus clases.


Existen algunas herramientas comerciales: Structure101 y Lattix que se pueden usar para este propósito.




Una herramienta que hace esto es el tomograph software. Es comercial y la interfaz de usuario apesta: o


Una primera respuesta posible es ... no bonita. Pero comienza a hacer lo que yo busco (una mejor solución se CAD ).

Dependency Finder ! Descárgalo , descomprímelo.

No es el proyecto más moderno o activo de la historia, pero si edita [Dependency Finder] /bin/DependencyFinder.bat, agregue su ruta para DEFAULT_DEPENDENCYFINDER_HOME, configure un JAVA_HOME, puede iniciarlo.

A continuación, haga clic en el botón ''Extraer'' (CTRL-E - primer botón), ingrese la ruta de las clases y deje que se escanee.

La parte engañosa es hacer clic exactamente en el conjunto correcto de elementos de "elementos de programación" y "cierres", para no ser inundados por el nivel de detalles en el resultado.

  • Seleccione solo ''clases'' en el lado izquierdo (''elementos de programación'').
  • Seleccione solo ''clases'' en el lado derecho (''cierres'').
  • Agregue "/javax?./,/org./,/sun./" como patrón de exclusión (para los elementos de programación y los cierres).
  • Haga clic en las ruedas (último botón - Calcular todo - Ctrl + A ).

Y aquí tienes.

Cada vez que ve ''<->'', tiene una agradable dependencia cíclica . (Si selecciona ''características'' en el lado ''cierre'', incluso puede saber qué función dispara el ciclo, increíble).

Estoy listo para probar otras sugerencias.



Y puede usar la herramienta de código abierto CAP que es un plugin de Eclipse.

CAP tiene una vista de paquete gráfica que le mostrará las líneas de las clases, por lo que después de algunos clics (dependiendo del tamaño del círculo) encontrará al culpable.


Highwheel detecta ciclos de clases y paquetes e informa la fuente de las dependencias hasta el nivel de clase / método / campo indicando el tipo de relación (herencia, composición, parte de una firma de método, etc.).

También divide grandes ciclos en sus subelementos, que pueden ser comprendidos / abordados individualmente.

El resultado es HTML con contenido SVG incrustado que requiere un navegador moderno.