2008-09-15 21 views
31

¿Qué herramienta me recomiendan para detectar paquete Java dependencias cíclicas,
sabiendo que el objetivo es una relación explícita de las clases específicas implicadas en el 'ciclo de paquetes a través de' detectado?java package cycle detection: cómo encontrar las clases específicas involucradas?

Conozco classycle y JDepend, pero ninguno de los dos enumera las clases implicadas en una dependencia de paquete cíclico.
Metrics tiene una representación gráfica interesante de ciclos, pero nuevamente limitada a paquetes, y bastante difícil de leer alguna vez.

estoy cansando de conseguir una:

"tiene una dependencia ciclo paquete entre los 3 paquetes
tiene clases xxx en cada
buena suerte para encontrar las clases correctas y romper este ciclo "

¿Conoces alguna herramienta que tome el ex Tra paso para realmente explicarle por qué se detecta el ciclo (es decir 'enumerar las clases involucradas')?


Riiight ... Es hora de anunciar 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 que puede esperarse sino freeware

@ daniel6651 gracias, pero, como se dijo, freeware única (lo siento, no lo he 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 el 0.8.7 version in passing (busque el detector de estilo nuevo 'para encontrar las dependencias circulares entre las clases'), y no puedo probarlo.
Actualización: funciona ahora, tenía un archivo de configuración de findbugs antiguo en el que esa opción no estaba activada. Todavía me gusta CAD aunque;)

la respuesta es ... ver my own (second) answer below

+0

Simplemente ponga la respuesta en la pregunta. Jeeps información juntos. –

Respuesta

1

Y puede usar la herramienta de código abierto CAP que es un plugin de eclipse. http://cap.xore.de/ CAP tiene una vista gráfica del paquete 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.

0

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

1

una primera respuesta posible es ... no es bonita. Pero comienza a hacer lo que yo estoy buscando. (una mejor solución es presented below)

Dependency Finder! Download it, 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, establezca un JAVA_HOME, puede iniciarlo.

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

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

  • seleccionar sólo 'clases' en el lado izquierdo ('') elementos de programación
  • seleccionar sólo 'clases' en el lado derecho ('cierres')
  • complemento "/javax?./,/ org./,/sun./" como patrón de exclusión (tanto para los elementos de programación y cierres)
  • Haga clic en las ruedas (último botón - Calcular todo - Ctrl a)

y aquí tienes.
Cuando veas '< ->', tienes una agradable dependencia cíclica.
(Si selecciona 'características' en el lado 'cierre',
incluso se puede saber qué función se dispara el ciclo - impresionante -)

estoy dispuesto a probar cualquier otra sugerencia.

21

Bueno ... después de probar DepFinder presented above, resulta que es ideal para una detección rápida de las 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, hasta a la fecha, fácil de usar y ofrece la representación gráfica de las clases y sus dependencias circulares. Un sueño hecho realidad;)

usted tiene que crear un plan de trabajo en el que se introduce sólo el directorio de sus clases (.class) (sin necesidad de tener una ruta de clase completa)
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 área de trabajo, debe volver a abrirla (!) Para activar un nuevo escaneo de sus clases.

screenshot

+0

realmente buena herramienta. – 99Sono

3

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

También divide ciclos grandes hacia abajo en sus subelementos que se pueden entender/abordar individualmente.

https://github.com/hcoles/highwheel

La salida es html con SVG embebido que requiere un navegador moderno.