Aggregating Javadocs For Multi-Projects

For example, consider the following directory structure:

Project
  |-- pom.xml
  |-- Module1
  |   `-- pom.xml
  |-- Module2
  |   `-- pom.xml
  `-- Module3
    `-- pom.xml

Using The <aggregate> Parameter

The <aggregate/> parameter can be used to generate javadocs for multi-module projects. It gives the option to generate one javadoc report for the entire project (all modules) or generate one javadoc report for each module.

When you execute javadoc:javadoc from Project directory with aggregate set to true , a javadoc report will be created in the target directory of Project with all the javadocs of Project's modules included. If aggregate is set to false (default), a javadoc report for Module1 will be generated in the target directory of Module1, a javadoc report for Module2 will be generated in the target directory of Module2, and a javadoc report for Module3 will be generated in the target directory of Module3.

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <configuration>
          ...
          <aggregate>true</aggregate>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </reporting>
  ...
</project>

Using The <aggregate> Goal

The <aggregate/> parameter doesn't include generate source directories defined using the build-helper:add-source . In this case, you need to use the aggregate goal and test-aggregate goals. You could also define several <reportSet/> like the following:

<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <reportSets>
          <reportSet>
            <id>non-aggregate</id>
            <configuration>
              ...
            </configuration>
            <reports>
              <report>javadoc</report>
            </reports>
          </reportSet>
          <reportSet>
            <id>aggregate</id>
            <configuration>
              ...
            </configuration>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>