 ------
 Usage
 ------
 31 July 2006
 ------

 ~~ 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/guides/mini/guide-apt-format.html


Usage

 The reports may use either <<<range>>>, <<<date>>>, or <<<tag>>> as the type
 for generating the reports. Only one type can be set. The change sets can be
 configured by setting the correct parameter for the chosen type. If <<<type>>>
 "date" is chosen, then the parameter <<<dates>>> should contain the start and
 stop dates for the date range. Similar configurations should be made for the
 "range" and "tag" types.

 To generate the changelog reports, just add the following in your project's
 <<<pom.xml>>>:

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changelog-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+

 Aside from the required plugin configuration parameters needed to generate the
 reports, all reports will refer to the <<<scm>>> elements inside the project
 descriptor for details regarding the connection to the project's SCM.
 Here is an example of the scm element inside the <<<pom.xml>>>:

-------------------
<project>
  ...
  <scm>
    <connection>scm:svn:http://server/path/to/project/trunk</connection>
    <developerConnection>scm:svn:https://server/path/to/project/trunk</developerConnection>
    <url>scm:svn:http://server/path/to/view/trunk</url>
  </scm>
  ...
</project>
-------------------

 Please refer to the Maven project descriptor for the description of the
 <<<scm>>> elements. It can be found
 {{{http://maven.apache.org/ref/current/maven-model/maven.html#class_scm}here}}.

 When you execute <<<mvn site>>>, you will see that the <<<changelog>>>,
 <<<dev-activity>>> and <<<file-activity>>> reports are included in the
 generated site.

 Sample Changelog report:

[images/sample-changelog-report.PNG] Sample Changelog Report


 Sample Developer Activity report:

[images/sample-dev-activity-report.PNG] Sample Developer Activity Report


 Sample File Activity report:

[images/sample-file-activity-report.PNG] Sample File Activity Report
