it-swarm-es.tech

Java detección del ciclo del paquete: ¿cómo encuentro las clases específicas involucradas?

¿Qué herramienta recomendaría para detectar dependencias cíclicas del paquete Java , sabiendo que el objetivo es enumerar explícitamente las clases específicas involucradas en el 'detectado' cross-packages cycle '?

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

Me estoy cansando de tener un:

"usted tiene una dependencia del ciclo de paquetes entre esos 3 paquetes
¡tienes xxx clases en cada una
¡buena suerte para encontrar las clases correctas y romper este ciclo "

¿Conoces alguna herramienta que dé un paso adicional para explicarte realmente por qué se detecta el ciclo (es decir, `` enumera las clases involucradas '')?


Riiight ... 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 software gratuito (lamento no haberlo mencionado en primer lugar).

@izb como usuario frecuente de findbugs (usando la última versión 1.3.5 en este momento), estoy a un clic de distancia para aceptar su respuesta ... si pudiera explicarme qué opción hay para activar findbug para detectar cualquier ciclo. Esa característica solo se menciona para versión 0.8.7 de pasada (busque ' ¡Nuevo detector de estilo para encontrar dependencias circulares entre clases'), y no puedo para probarlo Actualización: funciona ahora, y tenía un viejo archivo de configuración de findbugs en el que esa opción no estaba activada. Todavía me gusta CAD aunque;)

LA RESPUESTA es ... ver mi propia (segunda) respuesta a continuación

39
VonC

Findbugs puede detectar dependencias de clase circulares y también tiene un complemento Eclipse.

http://findbugs.sourceforge.net/

14
izb

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

Entonces 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 conjunto de trabajo en el que ingrese solo el directorio de sus clases (.class) (no es necesario tener un classpath completo)
La opción "Detectar dependencias circulares - ALT-C"funciona como publicidad y no toma el 100% de la CPU durante horas para analizar mis 468 clases.
Nota: para actualizar un espacio de trabajo, debe abrirlo nuevamente (!), Para activar un nuevo escaneo de sus clases.

screenshot

26
VonC

Highwheel detecta los ciclos de clase y paquete e informa el origen de las dependencias hasta el nivel de clase/método/campo que indica el tipo de relación (herencia, composición, parte de la firma de un método, etc.).

También divide los ciclos grandes en sus subelementos que pueden entenderse/abordarse individualmente.

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

4
henry

También hay Estructura101 que debería hacer esto.

4
squiddle

Usamos Sonar para detectar ciclos de paquetes. Dibuja un buen gráfico de las dependencias y muestra cuáles van en la dirección incorrecta. Incluso puede navegar a la fuente donde se usa la dependencia.

Ver http://www.sonarsource.org/fight-back-design-erosion-by-breaking-cycles-with-sonar/

4
Stijn Van Bael

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

Buscador de dependencias ! Descargarlo , descomprimirlo.

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

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

La parte difícil es hacer clic exactamente en el conjunto correcto de "elementos de programación" y "elementos de cierre", para no verse 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 (tanto para elementos de programación como para cierres).
  • Haga clic en las ruedas (último botón - Calcular todo - Ctrl + A).

Y aqui tienes.

Siempre que vea '<->', tiene una dependencia cíclica de Niza . (Si selecciona 'características' en el lado de 'cierre', incluso puede saber qué función activa el ciclo: increíble).

Estoy listo para probar cualquier otra sugerencia.

1
VonC

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

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

1
squiddle

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

0
squiddle

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

0
daniel6651