UML в Javadoc через maven+umlgraph

UPD из 2025. Сайт UMLGraph похоже перестал поддерживаться, попробуйте PlantUML

 

Где-то год назад писал про различные UML-редакторы.

К сожалению, ситуация толком не изменилась, пока действительно удобного на 100% для себя инструмента для создания UML-диаграмм не нашел.
UMLet – хорошо спасает в 80% случаев для быстрого прототипирования, но иногда его не хватает.

Сейчас речь пойдет не о нем, а о UMLGraph.
Это инструмент, который позволяет осуществлять декларативный способ рисования uml-диаграмм. Другими словами UML диаграммы создаются в текстовом виде, а не рисуется мышкой. Некоторым программистам (в частности мне) работать с текстом несколько удобней, чем с мышкой и со множеством графических объектов.

Возможностей у UMLGraph довольно много, но лично меня интересовали только следующие его возможности:

1. Рисование только диаграмм классов. Использование umlgraph для создания диаграмм последовательности, развертывания и т.д. мне не интересно.
2. Встраивание полученных диаграмм в JavaDoc.
3. Связка с maven-ом.

В результате некоторых манипуляций, можно получить следующий результат:

Что нужно для этого сделать:
1. Необходимо установить Graphiz. Это утилита для рисования различных диаграмм, через нее будем создавать итоговые рисунки.

Если у вас Windows, то для этого нужно:
– Зайти на сайт http://www.graphviz.org/.
– Выбрать пункт Download.
– Прочитать лицензию, если все ОК – нажать “Agreе“.
– Выбрать дистрибутив под Windows и установить.

Если у вас например Ubuntu, то все намного проще! Поскольку graphviz есть в стандартных репах, то вы можете установить через apt:

sudo apt-get install graphviz

2. Прописать в pom.xml использование umlgraph

<project ...>
    ... 
    <reporting>
        <plugins>
            <plugin>
                <artifactid>maven-javadoc-plugin</artifactid>
                <configuration>
                  <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
                  <docletartifact>
                    <groupid>org.umlgraph</groupid>
                    <artifactid>doclet</artifactid>
                    <version>5.1</version>
                  </docletartifact>
                  <additionalparam>-views
                    -inferrel -inferdep -quiet -hide java.*
                    -collpackages java.util.* 
                    -qualify
                    -postfixpackage 
        	    -attributes 
		    -operations 
		    -types
                    -nodefontclassname "Arial"
                    -nodefontclassabstractname "Arial Italic"
                    -nodefontclasssize 10
                    -nodefontname "Arial"
                    -nodefontabstractname "Arial Italic"
                    -nodefontsize 10
                    -nodefonttagname "Arial Italic"
                    -nodefonttagsize 10
                    -nodefontpackagename "Arial Italic"
                    -nodefontpackagesize 10
                    -edgefontsize 10
                  </additionalparam>
                  <usestandarddocletoptions>true</usestandarddocletoptions>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
    ...
</project>

В additionalparam можно указать свои настройки, чтобы настроить отображение диаграмм на свой вкус и цвет. В этом примере я немного поигрался с шрифтами. Список возможных настроек можно посмотреть здесь: https://github.com/dspinellis/UMLGraph

3. Проверить, что программы из Graphiz установлены и доступен. Например можно набрать для этого в командной строке:

dot --help

4. Запустить mvn site. Как обычно в папке target появится директория с документацией.

Пару полезных заметок:
1. Чтобы исключить класс из диаграммы можно использовать опцию @hidden (см. пример PostA.java)
2. Список возможных опций можно посмотреть здесь: https://www.spinellis.gr/umlgraph/index.html

UPD. В Java 8 усилились требования к оформлению Javadoc. Можно ее ослабить добавлением в additionalparam параметра -Xdoclint:none”.
Вот так:

    -Xdoclint:none
    -views 
    и т.д.

Об авторе
Более 20 лет в разработке ПО, специализируюсь на Java. Опыт в создании масштабируемых и высокопроизводительных систем, разработке мобильных приложений. Подробнее об авторе и правилах использования контента – на странице @author.