Skip to content

Instantly share code, notes, and snippets.

@robertbraeutigam
Created May 2, 2018 20:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save robertbraeutigam/6cca2e021bed38df7e5510db5eec4be0 to your computer and use it in GitHub Desktop.
Save robertbraeutigam/6cca2e021bed38df7e5510db5eec4be0 to your computer and use it in GitHub Desktop.
Small shell-script to visualize import dependencies between Java classes.
#!/bin/sh
cat >dependencies.dot <<EOF
digraph g {
graph [
rankdir = "LR"
];
node [
fontsize = "12"
fontname = "Courier"
shape = "ellipse"
];
EOF
PACKAGE=`pwd | sed "s/.*src\/main\/java\/\(.*\)/\1/" | sed "s/\//./g"`
for i in `ls | grep -v \.java`
do
grep -roh "import $PACKAGE.[a-z][^.]*" $i | sort| uniq | grep -v static | sed "s/import $PACKAGE.\([a-z][^.]*\).*/\1/" | grep -v $i | sed "s/\(.*\)/\"$i\" -> \"\1\"/";
if grep -roh "import $PACKAGE.[A-Z][^.]*" $i >/dev/null
then
echo "\"$i\" -> \"<root>\"" >>dependencies.dot
fi
done >>dependencies.dot
grep -oh "import $PACKAGE.[a-z][^.]*" *java 2>/dev/null| sort| uniq | grep -v static | sed "s/import $PACKAGE.\([a-z][^.]*\).*/\1/" | sed "s/\(.*\)/\"<root>\" -> \"\1\"/" >>dependencies.dot;
cat >>dependencies.dot <<EOF
}
EOF
dot -Tpng -o dependencies.png dependencies.dot
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment