 ------
 Generate aggregate Javadoc without duplicate execution of phase compile.
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements.  See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership.  The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License.  You may obtain a copy of the License at
~~
~~   http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied.  See the License for the
~~ specific language governing permissions and limitations
~~ under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Generate aggregate Javadoc without duplicate execution of phase compile.

 * The standard goals <<<aggregate>>> and <<<test-aggregate>>> invoke separate lifecyles
 <<<compile>>> and <<<test-compile>>>.

 * In a CI environment you now might execute something like <<<mvn clean deploy site site-deploy>>>.

 * During <<<site>>> build the standard reports will trigger <<<compile>>> or
 <<<test-compile>>> again, depending on your build this may take some time, because
 stuff like <<<enforcer>>> or generating stubs from a WDSL will be invoked again, which may lead
 to longer build times.

 * As of version 3.0.1 two new reports are defined, <<<aggregate-no-fork>>> and <<<test-aggregate-no-fork>>>
 which will not trigger above phases a second time.

 * Configure this in your <<<reporting>>> section as follows:

+-----+
<project>
  ...
  <reporting>
    <excludeDefaults>true</excludeDefaults>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>${project.version}</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>aggregate-no-fork</report>
              <report>test-aggregate-no-fork</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+
