{"id":237,"date":"2026-10-13T01:01:39","date_gmt":"2026-10-13T01:01:39","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2010\/04\/14\/reporting-plugins-in-maven\/"},"modified":"2026-10-13T01:01:39","modified_gmt":"2026-10-13T01:01:39","slug":"reporting-plugins-in-maven","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/reporting-plugins-in-maven\/","title":{"rendered":"Maven Reporting Plugins: Configure Site Reports in pom.xml (All, Selective, and reportSets)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2010-04-14; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maven reporting plugins generate project documentation (such as project metadata, test summaries, source analysis, and API docs) during the Maven Site lifecycle. This guide is for DevOps and build engineers who want to configure reports correctly in <code>pom.xml<\/code>, run all reports or only selected reports, and avoid common configuration mistakes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading='lazy' decoding='async' src='https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2010\/04\/reporting-plugins-in-maven.png' alt='reporting-plugins-in-maven' width='600' height='400' \/><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The original post also included a YouTube gallery embed that currently fails with an API-key restriction error; the referenced setup video link is <a href='https:\/\/www.youtube.com\/watch?v=ZCfrNvu6nMc'>here<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Maven reporting plugins are<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reporting plugins are configured under the <code>&lt;reporting&gt;<\/code> section and are executed as part of site generation. In practice, you typically run <code>mvn site<\/code> (or the older form <code>mvn site:site<\/code>) and Maven writes report output into <code>target\/site<\/code>.<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\" class='language-bash'><span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">site<\/span>\n# <span class=\"hljs-selector-tag\">legacy<\/span> <span class=\"hljs-selector-tag\">invocation<\/span> <span class=\"hljs-selector-tag\">often<\/span> <span class=\"hljs-selector-tag\">seen<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">older<\/span> <span class=\"hljs-selector-tag\">docs<\/span>\n<span class=\"hljs-selector-tag\">mvn<\/span> <span class=\"hljs-selector-tag\">site<\/span><span class=\"hljs-selector-pseudo\">:site<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Reporting section vs build plugins section<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The source article highlights an important distinction: configuration placed in <code>&lt;reporting&gt;<\/code> is intended for report generation, while configuration in <code>&lt;build&gt;&lt;plugins&gt;<\/code> is intended for build lifecycle goals. Treat them as separate concerns.<\/p>\n\n\n\n<figure class='wp-block-table'><table class='has-fixed-layout'><thead><tr><th>Aspect<\/th><th>&lt;reporting&gt;<\/th><th>&lt;build&gt;&lt;plugins&gt;<\/th><\/tr><\/thead><tbody><tr><td>Primary purpose<\/td><td>Project documentation and HTML reports<\/td><td>Compile, test, package, deploy, and other build tasks<\/td><\/tr><tr><td>Typical trigger<\/td><td><code>mvn site<\/code><\/td><td><code>mvn verify<\/code>, <code>mvn package<\/code>, etc.<\/td><\/tr><tr><td>Output pattern<\/td><td>Site\/report artifacts in <code>target\/site<\/code><\/td><td>Build artifacts and lifecycle outputs<\/td><\/tr><tr><td>Configuration scope<\/td><td>Report-oriented plugin settings<\/td><td>Build-oriented plugin settings<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Report generation workflow in the Maven Site lifecycle<\/h2>\n\n\n\n<pre class='mermaid'>\nflowchart TD\n    A[Configure reporting in pom.xml] --> B[Run mvn site]\n    B --> C[Site lifecycle executes]\n    C --> D[Reporting plugin goals run]\n    D --> E[HTML reports generated in target\/site]\n    E --> F[Publish or archive site artifacts]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Configure all Project Info reports<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To include the default report set from the Project Info Reports plugin, add the plugin under <code>&lt;reporting&gt;<\/code>:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\" class='language-xml'><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n  ...\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reporting<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.apache.maven.plugins<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-project-info-reports-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reporting<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">project<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class='wp-block-code'><span><code class=\"hljs\" class='language-bash'>mvn site<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Run selected reports only<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original article shows selecting reports explicitly. The example below mirrors those legacy report names from the source post:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\" class='language-xml'><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reporting<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.apache.maven.plugins<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-project-info-reports-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reportSets<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>dependencies<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>project-team<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>mailing-list<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>cim<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>issue-tracking<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>license<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>scm<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reportSets<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reporting<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Configure multiple reports for one plugin with reportSets<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can define multiple report sets for one plugin. As noted in the source material, each <code>&lt;reportSet&gt;<\/code> should have a unique <code>&lt;id&gt;<\/code>. The following preserves the original UMLGraph-style Javadoc example pattern:<\/p>\n\n\n<pre class='wp-block-code' aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\" class='language-xml'><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reporting<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.apache.maven.plugins<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>maven-javadoc-plugin<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reportSets<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>uml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">doclet<\/span>&gt;<\/span>gr.spinellis.umlgraph.doclet.UmlGraph<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">doclet<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">docletArtifact<\/span>&gt;<\/span>\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>gr.spinellis<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>UmlGraph<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n              <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>4.4<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">docletArtifact<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">additionalparam<\/span>&gt;<\/span>-views<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">additionalparam<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">destDir<\/span>&gt;<\/span>target\/uml<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">destDir<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">show<\/span>&gt;<\/span>private<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">show<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">configuration<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>javadoc<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">id<\/span>&gt;<\/span>api<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">id<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">report<\/span>&gt;<\/span>javadoc<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">report<\/span>&gt;<\/span>\n          <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reports<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reportSet<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reportSets<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugin<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">plugins<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">reporting<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Known plugins that provide reports (legacy links from the original post)<\/h2>\n\n\n\n<figure class='wp-block-table'><table class='has-fixed-layout'><thead><tr><th>Plugin<\/th><th>Report focus<\/th><th>Original link<\/th><\/tr><\/thead><tbody><tr><td>Project-Info-Reports<\/td><td>Standard project reports<\/td><td><a href='http:\/\/maven.apache.org\/plugins\/maven-project-info-reports-plugin\/'>maven-project-info-reports-plugin<\/a><\/td><\/tr><tr><td>Javadoc<\/td><td>API documentation<\/td><td><a href='http:\/\/maven.apache.org\/plugins\/maven-javadoc-plugin\/'>maven-javadoc-plugin<\/a><\/td><\/tr><tr><td>JXR<\/td><td>Source cross-reference<\/td><td><a href='http:\/\/mojo.codehaus.org\/jxr-maven-plugin\/'>jxr-maven-plugin<\/a><\/td><\/tr><tr><td>Surefire Report<\/td><td>Unit test report<\/td><td><a href='http:\/\/mojo.codehaus.org\/surefire-report-maven-plugin\/'>surefire-report-maven-plugin<\/a><\/td><\/tr><tr><td>Changes<\/td><td>Changes and JIRA report<\/td><td><a href='http:\/\/mojo.codehaus.org\/changes-maven-plugin\/'>changes-maven-plugin<\/a><\/td><\/tr><tr><td>Taglist<\/td><td>TODO and deprecated tag reporting<\/td><td><a href='http:\/\/mojo.codehaus.org\/taglist-maven-plugin\/'>taglist-maven-plugin<\/a><\/td><\/tr><tr><td>PMD<\/td><td>Source-code analysis report<\/td><td><a href='http:\/\/maven.apache.org\/plugins\/maven-pmd-plugin\/'>maven-pmd-plugin<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls<\/h2>\n\n\n\n<ul class='wp-block-list'><li>Placing report configuration only under <code>&lt;build&gt;&lt;plugins&gt;<\/code> and expecting <code>mvn site<\/code> to use it.<\/li><li>Copying legacy report names without validating against your current plugin version.<\/li><li>Forgetting project metadata sections (SCM, issue tracking, organization), which can make reports incomplete.<\/li><li>Using old plugin URLs and version references from historical posts without checking current documentation.<\/li><li>Generating reports locally but not publishing <code>target\/site<\/code> artifacts in CI\/CD.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Maven reporting plugins generate project documentation during the site lifecycle and are configured in the reporting section of pom.xml. This guide shows how to run all reports, select specific ones, and structure reportSets cleanly.<\/p>\n","protected":false},"author":1,"featured_media":4274,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[29],"tags":[3887,282,3889,507,161,3886,3891,3885,3888,3890,1076,3883,3884],"class_list":["post-237","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-maven","tag-apache-maven-plugin","tag-configuration","tag-configuring-reports","tag-list","tag-maven","tag-maven-plugins-that-provide-reports","tag-maven-pom-reporting","tag-maven-reporting-plugins","tag-maven-reporting-tag","tag-maven-surefire-report-plugin","tag-plugins","tag-report","tag-reporting-plugins"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=237"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/237\/revisions"}],"predecessor-version":[{"id":79067,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/237\/revisions\/79067"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/4274"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}