Dephender


Dephender is an architecture analyzer for Java projects. It works on class files and present a graphical view of your architechture. The image below is an example of the Dephender UI (this is from the Dephender project it self).

The top level view shows packages. Note that third party libraries (jar files) and language specific classes/interfaces are not part of the analysis (like java.lang.String for example). Dephender only looks at the classes that are in "your" project.

The arrows indicate the number of dependencies between different components, like packages, classes etc. From the image above we can see that there are, for example, seven dependencies from the org.dephender.java package to the org.dephender.analyze.constantpool package. If a dependency is clicked (the arrow with the number) the table below the the graphical image is populated with the actual dependencies (method calls or static access). Again, from the screenshot above, we can see that all seven dependencies from org.dephender.java to org.dephender.analyze.constantpool is from the class org.dephender.java.DephenderClass but ends in various other classes in org.dephender.analyze.constantpool (ConstantPool, ConstantPoolField etc).

By clicking the small plus icon left of each package it can be expanded. An expanded package reveals all internal classes and interfaces. The arrow from the package level is now divided amongs the internal classes and interfaces. This gives a more detailed view.

In the screenshot above the org.dephender.analyze.constantpool package has been expanded. The seven dependencies from org.dephender.java to org.dephender.analyze.constantpool are now revealed graphically: four goes to the ConstantPool class, two goes to ConstantPoolItemFieldMethodInterface class and one is to the ConstantPoolField class. Of course all inter-package dependencies between classes inside org.dephender.analyze.constantpool are shown now as well.

I deliberately added a cyclic dependency in Dephender to illustrate the red arrows. In the screenshot above the demo packages com.dephender.demonstration.a and com.dephender.demonstration.b are expanded. The red arrows indicate that these two packages are involved in a cyclic dependency, i.e. call methods and/or access static data in eachother.

Dephender was written because Structure101 is to expensive and all the other analyzers I tried didn't work or didn't really show what I wanted to see. The tool is aimed to help you in getting a better layout/architechture for your project.


TODO list


Dephender can be downloaded here as a jar file. This is a runnable jar file, so double clicking to start should work. Otherwise it can always be started from from the command line: ">java -jar Dephender.jar".