tutorial pasos para interfaz graficos grafica español ejemplos crear componentes componente java dependencies static-analysis

java - pasos - swing containers



Herramienta para generar datos gráficos para dependencias de clase (9)

¿Existe alguna herramienta que pueda analizar los archivos fuente de Java , construir un gráfico a partir de él y proporcionar los datos del gráfico en algún formato estándar / comprensible ?

Definitivamente no es necesario tener GUI, prefiero una cosa de línea de comandos para poder procesar la salida mediante varias herramientas (para segmentación, visualización, ...).


Acabo de crear una herramienta mínima que analiza y muestra un gráfico de dependencias entre paquetes, sin mucha interacción ni necesidad de otros programas.

https://github.com/battlesnake/jorgy

Es bastante indocumentado ya que es un proyecto de pirateo rápido, pero básicamente lo ejecutas y pasas la ruta a tu directorio de origen como el primer argumento.

No importa los nombres de directorio o los nombres de archivo, pero requiere:

  • Declaración de package en cada archivo.

  • Exactamente un tipo definido en el nivel superior (cero o muchos tipos internos anidados dentro de eso están bien).

Puede alterar la interfaz GraphStyle en la clase de Application para que se adapte a sus necesidades. Esta interfaz le proporciona una manera de decirle al generador de gráficos qué dependencias son débiles, que no se deben mostrar en el gráfico, etc.



De http://blog.schauderhaft.de/degraph/ :

Puede analizar los archivos de clase y los archivos jar utilizando Degraph y obtener un archivo graphml como resultado. Esto puede ser renderizado usando yed.



Es posible que UMLGraph sea útil. Aprovecha GraphViz / dot al igual que la mayoría de estas herramientas gráficas. Sin embargo, no lo he usado, así que no puedo dar una reseña.

Dicho esto, también puedes rodar tu propia herramienta de diagramación minimalista utilizando GraphViz y dot.

He utilizado GraphViz / dot para generar muchos tipos útiles de diagramas, desde visualizaciones de contextos Spring a dependencias de módulos IntelliJ, hasta visualizaciones de documentos XML complejos. Mira a tu alrededor y ve lo que encuentres.


No estoy seguro de las herramientas de línea de comandos, pero me gusta usar ObjectAid para ingeniería inversa en diagramas de clase:

http://www.objectaid.com/

Puede agregar fácilmente cualquier clase con sus relaciones a un gráfico de ObjectAid. Guarda el archivo en formato XML con la extensión ucls. Aquí hay una muestra:

<?xml version="1.0" encoding="UTF-8"?> <class-diagram version="1.1.4" icons="true" always-add-relationships="true" generalizations="true" realizations="true" associations="true" dependencies="true" nesting-relationships="true"> <class id="1" language="java" name="my.classpath.common.controllers.AuthenticationInterceptor" project="MyProject" file="/SpecialPath/common/controllers/AuthenticationInterceptor.java" binary="false" corner="BOTTOM_RIGHT"> <position height="205" width="355" x="2222" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="2" language="java" name="my.classpath.common.domain.CompanyAssignmentLocation" project="MyProject" file="/SpecialPath/common/domain/CompanyAssignmentLocation.java" binary="false" corner="BOTTOM_RIGHT"> <position height="-1" width="-1" x="856" y="399" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="3" language="java" name="my.classpath.common.domain.LocationsSpreadsheetReader" project="MyProject" file="/SpecialPath/common/domain/LocationsSpreadsheetReader.java" binary="false" corner="BOTTOM_RIGHT"> <position height="115" width="348" x="680" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="4" language="java" name="my.classpath.common.domain.Stock" project="MyProject" file="/SpecialPath/common/domain/Stock.java" binary="false" corner="BOTTOM_RIGHT"> <position height="439" width="210" x="430" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="5" language="java" name="my.classpath.common.util.FilesUtil" project="MyProject" file="/SpecialPath/common/util/FilesUtil.java" binary="false" corner="BOTTOM_RIGHT"> <position height="277" width="218" x="1409" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="6" language="java" name="my.classpath.common.util.MyProjectUtil" project="MyProject" file="/SpecialPath/common/util/MyProjectUtil.java" binary="false" corner="BOTTOM_RIGHT"> <position height="439" width="349" x="41" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="7" language="java" name="my.classpath.common.util.SpringUtil" project="MyProject" file="/SpecialPath/common/util/SpringUtil.java" binary="false" corner="BOTTOM_RIGHT"> <position height="133" width="246" x="1936" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="8" language="java" name="my.classpath.common.util.MyProjectUserUtil" project="MyProject" file="/SpecialPath/common/util/MyProjectUserUtil.java" binary="false" corner="BOTTOM_RIGHT"> <position height="133" width="229" x="1667" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <class id="9" language="java" name="my.classpath.common.util.UnitConversion" project="MyProject" file="/SpecialPath/common/util/UnitConversion.java" binary="false" corner="BOTTOM_RIGHT"> <position height="151" width="301" x="1068" y="37" /> <display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </display> </class> <dependency id="10"> <end type="SOURCE" refId="3" /> <end type="TARGET" refId="2" /> </dependency> <classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true" accessors="true" visibility="true"> <attributes public="true" package="true" protected="true" private="true" static="true" /> <operations public="true" package="true" protected="true" private="true" static="true" /> </classifier-display> <association-display labels="true" multiplicity="true" /> </class-diagram>

También puede usar PlantUML, pero es mejor para ingeniería avanzada que para ingeniería inversa:

http://plantuml.sourceforge.net/

PlantUML tiene su propia sintaxis única para la que también puede obtener una fuente, pero no es tan fácil de juntar como ObjectAid

Ambos funcionan como complementos de eclipse, lamento no saber más sobre las herramientas de la línea de comandos que podrían hacer lo que estás pidiendo.


Pruebe Google CodePro Analytix . La herramienta proporciona una buena visión sobre las dependencies .

Sin embargo, no he intentado usarlo desde una perspectiva de línea de comandos. Espero que sea compatible con la exportación de informes, que puede analizarse más abajo en la cadena de herramientas.


Si la pregunta sigue siendo real, intente usar el complemento Code Iris. Funciona con Intellij Idea http://plugins.jetbrains.com/plugin/7324

Proporciona una representación visual del gráfico de dependencia a nivel de clases, paquetes y módulos. Además, puedes exportar datos a formato json.

Todavía está actualizado y gratis.