Detección del ciclo del paquete Java:¿Cómo encuentro las clases específicas involucradas?[cerrado]

StackOverflow https://stackoverflow.com/questions/62276

Pregunta

¿Qué herramienta recomendarías para detectar? Dependencias cíclicas del paquete Java, saber que el objetivo es enumerar explícitamente las clases específicas involucradas en el 'ciclo entre paquetes' detectado?

Se acerca de clase y JDepende, pero ninguno de ellos enumera las clases involucradas en una dependencia de paquete cíclica. Métrica tiene una representación gráfica interesante de ciclos, pero nuevamente está limitada a paquetes y, en ocasiones, es bastante difícil de leer.

Me estoy cansando de conseguir un:

"tienes una dependencia del ciclo de paquetes entre esos 3 paquetes
tienes xxx clases en cada una
Buena suerte para encontrar las clases adecuadas y romper este ciclo "

¿Conoce alguna herramienta que dé un paso adicional para explicarle por qué se detecta el ciclo (es decir,'enumerar las clases involucradas')?


Bien...Es hora de proclamar los resultados:

@l7010.de:Gracias por el esfuerzo.Te votaré a favor (cuando tenga suficiente reputación), especialmente por la respuesta 'CAP'...pero CAP está muerto y ya no es compatible con mi Eclipse 3.4.El resto es comercial y sólo busco software gratuito.

@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 tu respuesta...si pudieras explicarme que opción hay que activar para que findbug detecte algún ciclo.Esa característica sólo se menciona para el Versión 0.8.7 de pasada (buscar 'Nuevo detector de estilo para encontrar dependencias circulares entre clases.'), y no puedo probarlo.Actualizar:Funciona ahora y tenía un archivo de configuración antiguo de findbugs en el que esa opción no estaba activada.Me sigue gustando CANALLA aunque ;)

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

¿Fue útil?

Solución

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

http://findbugs.sourceforge.net/

Otros consejos

Bien...después de la prueba DepFinder presentado arriba, resulta que es excelente para una detección rápida de dependencias simples, pero no escala bien con el número de clases...

Entonces la RESPUESTA REAL REAL es:CDA - Analizador de dependencia de clases

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

Tienes que crear un workset en el que ingresas solo el directorio de tus clases (.class) (no es necesario tener un classpath completo)
La opción "Detectar dependencias circulares - ALTA-C"funciona como se anuncia y no requiere el 100% de la CPU durante horas para analizar mis 468 clases.
Nota:para actualizar un espacio de trabajo, debe abrirlo nuevamente (!) para activar una nueva exploración de sus clases.

screenshot

Usamos Sonar para detectar ciclos de paquetes.Dibuja un bonito gráfico de las dependencias y muestra cuáles van en la dirección equivocada.Incluso puedes navegar hasta la fuente donde se utiliza la dependencia.

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

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

rueda alta detecta ciclos de clases y paquetes e informa el origen de las dependencias hasta el nivel de clase/método/campo, indicando 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 o abordarse individualmente.

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

Y puedes usar la herramienta de código abierto. GORRA que es un complemento de Eclipse.

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

Una primera respuesta posible es...no es bonito.Pero comienza a hacer lo que soy después (una mejor solución es mostrado abajo).

Buscador de dependencias! Descargalo, descomprímelo.

No es el proyecto más moderno o activo de todos los tiempos, pero si edita [Dependency Finder]/bin/DependencyFinder.bat, agrega su ruta para DEFAULT_DEPENDENCYFINDER_HOME, establece un JAVA_HOME, puede iniciarlo.

Luego haces clic en el botón 'Extraer' (CTRL-E - primer botón), ingresas la ruta de tus clases y dejas que se escanee.

La parte complicada es hacer clic exactamente en el conjunto correcto de 'elementos de programación' y 'cierres' para no verse abrumado por el nivel de detalles del resultado.

  • Seleccione sólo '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 - Control + A).

Y aquí tienes.

Cada vez que ves '<->', te has conseguido un buen dependencia cíclica.(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.

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top