Highwheel is a tool to detect and visualise class and package cycles in Java code.
It differs from other tools such as
In that it generates visualisations of the detected cycles and provides much more data about the detected dependencies.
To make it easier to make headway when working with legacy code, Highwheel also breaks down large cycles into their smaller elemental sub-cycles for easier comprehension.
Cycles are detected using tarjen's algorithm.
As fixing package cycles often involves moving classes between packages highwheel also reports unit tests that look to have been left the wrong package when their testee is moved ( for maven only in latest snapshot ).
TODO
But briefly
Analyse a single project, or a each module within a multi-module project individually.
mvn org.pitest:highwheel-maven:analyse
Analyse a multi-module project as a single component
mvn -DparentOnly=true org.pitest:highwheel-maven:analyse
By default assumes that your package names match your group id. If not can supply a filter using Glob syntax.
mvn -DclassFilter=com.bigcompany.* org.pitest:highwheel-maven:analyse
All options can of course be configured in your pom.xml.
Seperate goal dumps decompiled bytecode to disk
mvn org.pitest:highwheel-bytecode:asmDump
Create a task and pass in an analysisPath and filter
<taskdef name="highwheel" classname="org.pitest.highwheel.ant.AnalyseTask" classpathref="<path to jar>"/>
<target name="highwheel" depends="compile">
<highwheel analysisPathRef="code.path" filter="com.example.*"/>
</target>