JavaInspect - Utility to visualize java software

Table of Contents


1 General

Goal: simplify/speed up understanding the computer program code by automatically visualizing its structure.

JavaInspect is a Java library that you can embed into your Java project with a few lines of Maven configuration and then visualize any part of your Java program structure with few simple JavaInspect API calls at application runtime.

JavaInspect uses Java reflection to discover class relations and structure and produces GraphViz dot file that describes your application. Then launches GraphViz to generate bitmap graph in PNG format on your Desktop directory.

2 Current status

This is simple utility, quickly written. Tested on GNU Linux (can be relatively simply ported to other operating systems too). So far I used it for my own needs. There might be bugs and missing features. Feedback and code contributions are welcome.

3 Example graphs

Example visualization of Sixth project: architecture graphs.

A very simple example:

example.resized.png

Graph legend:

legend.png

4 Usage example 1

This example demonstrates generating of class graph from hand picked classes.

// Create graph
final ClassGraph graph = new ClassGraph();

// While classes and objects can be immediately passed to ClassGraph
// constructor as arguments, it is also possible to add them one by
// one as in the following example.

// Add some object to the graph.
graph.addObject(graph);

// Add some class to the graph.
graph.addClass(Utils.class);

// Produce bitmap image titled "JavaInspect.png" to the user Desktop
// directory and keep intermediary GraphViz DOT file for reference.
graph.generateGraph("JavaInspect", true);

Result:

5 Usage example 2

Recursively scan current directory for Java source code and attempt to detect class names from there to be added to the graph.

graph.addProject(".");

// Blacklist example classes from being shown on the graph
graph.getFilter().blacklistClassPattern(
    "eu.svjatoslav.inspector.java.structure.example.*");

// do not show single classes with no relationships on the graph
graph.hideOrphanedClasses();

// Produce bitmap image titled "JavaInspect full project.png" to the
// user Desktop directory.
graph.generateGraph("JavaInspect full project");

Result:

6 Embedding JavaInspect in your Maven project

Declare JavaInspect as dependency:

<dependencies>
    ...
    <dependency>
        <groupId>eu.svjatoslav</groupId>
        <artifactId>javainspect</artifactId>
        <version>1.3</version>
    </dependency>
    ...
</dependencies>

Add Maven repository to retrieve artifact from:

<repositories>
    ...
    <repository>
        <id>svjatoslav.eu</id>
        <name>Svjatoslav repository</name>
        <url>http://www2.svjatoslav.eu/maven/</url>
    </repository>
    ...
</repositories>

7 Requirements

GraphViz - shall be installed on the computer.

On Ubuntu/Debian use:

sudo apt-get install graphviz

Author: Svjatoslav Agejenko

Created: 2015-02-02 Mon 19:49

Emacs 24.4.1 (Org mode 8.2.10)

Validate