 ------
 Using Tag Type
 ------
 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


Using Tag Type

  To generate the changelog reports showing what has changed between two tags,
  you should use the "tag" <<<type>>>.

  With the following configuration, reports will be generated that covers SCM
  activities between the <<<alpha-2>>> tag and the <<<alpha-3>>> tag.

  <<Note:>> The "tag" type is not supported if you are using Subversion.  

+-----+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changelog-plugin</artifactId>
        <configuration>
          <type>tag</type>
          <tags>
            <tag implementation="java.lang.String">alpha-2</tag>
            <tag implementation="java.lang.String">alpha-3</tag>
          </tags>
        </configuration>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----+
