DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workkloads.

Secure your stack and shape the future! Help dev teams across the globe navigate their software supply chain security challenges.

Releasing software shouldn't be stressful or risky. Learn how to leverage progressive delivery techniques to ensure safer deployments.

Avoid machine learning mistakes and boost model performance! Discover key ML patterns, anti-patterns, data strategies, and more.

Related

  • Hey Developers: Diagrams Don’t Need to Be So Complex
  • Implementing Infrastructure as Code (IaC) for Data Center Management
  • On SBOMs, BitBucket, and OWASP Dependency Track
  • Scaling CI/CD: Standardizing Pipelines in Large-Scale Organizations

Trending

  • Unlocking AI Coding Assistants Part 3: Generating Diagrams, Open API Specs, And Test Data
  • Building Scalable and Resilient Data Pipelines With Apache Airflow
  • Google Cloud Document AI Basics
  • Unlocking the Benefits of a Private API in AWS API Gateway
  1. DZone
  2. Data Engineering
  3. Data
  4. Reverse-Engineer Source Code into UML Diagrams

Reverse-Engineer Source Code into UML Diagrams

This article shows how easy and simple it is to include UML diagrams within your Javadoc and also keep them updated with every change in the source code repository.

By 
Meera Subbarao user avatar
Meera Subbarao
·
Aug. 22, 08 · Tutorial
Likes (1)
Comment
Save
Tweet
Share
220.3K Views

Join the DZone community and get the full member experience.

Join For Free

I have been on several teams where we studiously designed UML diagrams at the beginning of the project. As the project progressed, and deadlines approached, the UML diagrams were left somewhere behind, not to be updated in months. When a new developer joined the team, we showcased the old UML diagrams, and kept telling "Oh, we never had time to update them, please see the source code to get an idea. And, don't hesitate to ask if you have any doubt's". I am sure, you all have gone through the same scenario.

However, we don't have to keep making up stories anymore, since this article shows how easy and simple it is to include UML diagrams within your Javadoc and also keep them updated with every change in the source code repository. We can do these in less than a few minutes, and in a few simple steps.

Getting started with UmlGraph takes five steps:

  1. Download the source code for UMlGraph.
  2. Download and install Graphviz.
  3. Make changes to your Ant build file.
  4. Run the Ant target.
  5. Add this target to your CI job.

Step 1: Download the source code for UMLGraph from here. Unzip the contents. To compile the Java doclet from the source code run ant on the build.xml file. Copy the UmlGraph.jar file to your projects library. If there is a version mismatch between the different versions of JDK you are using you get an exception like this:

java.lang.UnsupportedClassVersionError: Bad version number in .class file

Make sure you recompile the UMLGraph source code, and copy the library to your project.

Image title


Step2 : Download and install Graphviz fromhere. The dot file needs to be post-processed with Graphviz to produce the actual UML diagram. Running the UmlGraph doclet will generate a Graphviz diagram specification that can be automatically processed to create png drawings. You can also generate other formats using Graphviz as well. If Graphviz isn’t installed you will get an exception as shown below:

BUILD FAILED
/Users/meerasubbarao/Development/webservices-samples/build.xml:107:
Execute failed: java.io.IOException: dot: not found
Total time: 269 milliseconds


Step 3. Changes to your build.xml file.
Assuming you already have a working project, with Ant build file. Add the following target to your build.xml file as shown below:


<target name="javadocs" depends="build" description="generates javadoc and also UML Diagram"><mkdir dir="${reports.dir}/javadoc"/>        <javadoc sourcepath="${src.dir}" packagenames="com.stelligent.*" destdir="${reports.dir}/javadoc"        classpathref="java.classpath" private="true">           <doclet name="org.umlgraph.doclet.UmlGraphDoc"          path="lib/UMLGraph.jar">                <param name="-attributes" />                <param name="-operations" />                <param name="-qualify" />                <param name="-types" />                <param name="-visibility" />            </doclet>          </javadoc>  <apply executable="dot" dest="${reports.dir}" parallel="false">    <arg value="-Tpng"/>    <arg value="-o"/>     <targetfile/>     <srcfile/>     <fileset dir="${reports.dir}" includes="*.dot"/>     <mapper type="glob" from="*.dot" to="*.png"/>  </apply></target>

 

A number of options contol the operation of UMLGraph class diagram generator. These can be specified as parameters within your build file as shown above.

Details about a few options are:

-output
Specify the output file (default graph.dot).
-d
Specify the output directory (defaults to the current directory).
-qualify
Produce fully-qualified class names.
-horizontal
Layout the graph in the horizontal direction.
-attributes
Show class attributes (Java fields)
-operations
Show class operations (Java methods)
-constructors
Show a class's constructors
-visibility
Adorn class elements according to their visibility (private, public, protected, package)
-types
Add type information to attributes and operations
-enumerations
Show enumarations as separate stereotyped primitive types.
-enumconstants
When showing enumerations, also show the values they can take.
-all
Same as -attributes -operations -visibility -types -enumerations -enumconstants

Take a look here for more options.

Step 4. Run the ant target:
Open a command window and run the ant target: ant javadocs and you should see output as such in your console window:


meera-subbaraos-macbook-9:webservices-samples meerasubbarao$ ant javadocsBuildfile: build.xmlinit:cleanGenerated:build:    [javac] Compiling 22 source files to /Users/meerasubbarao/Development/ci-jobs/jobs/PetStore_Nightly/workspace/webservices-samples/classes    [javac] Note: Some input files use unchecked or unsafe operations.    [javac] Note: Recompile with -Xlint:unchecked for details.javadocs:  [javadoc] Generating Javadoc  [javadoc] Javadoc execution  [javadoc] Loading source files for package com.stelligent.biz.ws...  [javadoc] Loading source files for package com.stelligent.ent.jpa...  [javadoc] Constructing Javadoc information...  [javadoc] UmlGraphDoc version 5.0, running the standard doclet  [javadoc] Standard Doclet version 1.5.0_13  [javadoc] Building tree for all the packages and classes...  [javadoc] Building index for all the packages and classes...  [javadoc] Building index for all classes...  [javadoc] Generating /Users/meerasubbarao/Development/ci-jobs/jobs/PetStore_Nightly/workspace/webservices-samples/reports/javadoc/stylesheet.css...  [javadoc] UmlGraphDoc version 5.0, altering javadocs  [javadoc] Building Package view for package com.stelligent.biz.ws  [javadoc] Building Package view for package com.stelligent.ent.jpa  [javadoc] Building Context view for class com.stelligent.biz.ws.SupplierManagerBean  [javadoc] Building Context view for class com.stelligent.biz.ws.SupplierManager  [javadoc] Building Context view for class com.stelligent.biz.ws.SignonManagerBean  [javadoc] Building Context view for class com.stelligent.biz.ws.SignonManager.....BUILD SUCCESSFULTotal time: 8 secondsmeera-subbaraos-macbook-9:webservices-samples meerasubbarao$ 


The javadoc generated is pretty neat with UML diagrams on the top:

Image title


Step 5: Add this target to your CI Job.
If you already have a CI server like Hudson up and running, which runs commit builds and nightly builds, adding this new target is a one step process. In my case, I already have a nightly job running, I added this ant target to my default target as shown below:

<target name="all" depends="cleanAndDeployForCoverage, javadocs" />

Next, force a build on the Hudson job, publish the javadocs, and you can see the results on the hudson dashboard.

Image title


The Javadoc embedded with UML diagrams displayed from within the Hudson dashboard:

Image title


Now that we have UML diagram integrated within our build file, and also our CI job, we can ensure that our code base and the UML diagrams are always in sync. We saw how to include these ant targets in our commit builds or nightly builds of our CI jobs, and also published these artifacts as part of our post build process.

 

Resources:

  • Ant
  • UMLGraph
  • Graphviz
  • Hudson
UML Diagram Continuous Integration/Deployment

Opinions expressed by DZone contributors are their own.

Related

  • Hey Developers: Diagrams Don’t Need to Be So Complex
  • Implementing Infrastructure as Code (IaC) for Data Center Management
  • On SBOMs, BitBucket, and OWASP Dependency Track
  • Scaling CI/CD: Standardizing Pipelines in Large-Scale Organizations

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!