 ------
 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/doxia/references/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>
        <version>${project.version}</version>
      </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

 For a live report {{{./changelog.html}look here}}.


*Sample Developer Activity report

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

 For a live report {{{./dev-activity.html}look here}}.


*Sample File Activity report

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

 For a live report {{{./file-activity.html}look here}}.
